{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## pandas数据结构"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Series"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-06T23:04:17.065481Z",
     "start_time": "2023-04-06T23:04:16.035427Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd  # 基于numpy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-03T16:51:32.718346Z",
     "start_time": "2023-04-03T16:51:32.715167Z"
    },
    "pycharm": {
     "is_executing": true
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 2, 3, 6, 9])"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "0    1\n",
       "1    2\n",
       "2    3\n",
       "3    6\n",
       "4    9\n",
       "dtype: int64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "l = np.array([1, 2, 3, 6, 9])  # numpy数组\n",
    "s1 = pd.Series(data=l)  # series是1维数组，比numpy多了索引\n",
    "display(l, s1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-03T16:51:32.722041Z",
     "start_time": "2023-04-03T16:51:32.718444Z"
    },
    "pycharm": {
     "is_executing": true
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A    1\n",
       "B    2\n",
       "C    3\n",
       "D    6\n",
       "E    9\n",
       "dtype: int64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "s2 = pd.Series(data=l, index=list('ABCDE'))\n",
    "display(s2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-03T16:51:32.725488Z",
     "start_time": "2023-04-03T16:51:32.723891Z"
    },
    "pycharm": {
     "is_executing": true
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A    149\n",
       "B    130\n",
       "C    118\n",
       "D     99\n",
       "E     66\n",
       "dtype: int64"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s3 = pd.Series(data={'A': 149, 'B': 130, 'C': 118, 'D': 99, 'E': 66})\n",
    "s3"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### DataFrame"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-03T16:51:32.733150Z",
     "start_time": "2023-04-03T16:51:32.727891Z"
    },
    "pycharm": {
     "is_executing": true
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>70.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>60.0</td>\n",
       "      <td>111.0</td>\n",
       "      <td>108.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>15.0</td>\n",
       "      <td>103.0</td>\n",
       "      <td>94.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>15.0</td>\n",
       "      <td>93.0</td>\n",
       "      <td>119.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>3.0</td>\n",
       "      <td>63.0</td>\n",
       "      <td>150.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>23.0</td>\n",
       "      <td>140.0</td>\n",
       "      <td>26.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>60.0</td>\n",
       "      <td>119.0</td>\n",
       "      <td>140.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>121.0</td>\n",
       "      <td>23.0</td>\n",
       "      <td>27.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>12.0</td>\n",
       "      <td>29.0</td>\n",
       "      <td>96.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>97.0</td>\n",
       "      <td>107.0</td>\n",
       "      <td>16.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python   Math     En\n",
       "A    70.0    5.0   10.0\n",
       "B    60.0  111.0  108.0\n",
       "C    15.0  103.0   94.0\n",
       "D    15.0   93.0  119.0\n",
       "E     3.0   63.0  150.0\n",
       "F    23.0  140.0   26.0\n",
       "G    60.0  119.0  140.0\n",
       "H   121.0   23.0   27.0\n",
       "I    12.0   29.0   96.0\n",
       "J    97.0  107.0   16.0"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# dataFrame是二维的，多个Series共用索引，就组成了dataframe\n",
    "df1 = pd.DataFrame(data=np.random.randint(0, 151, size=(10, 3)),\n",
    "                   index=list('ABCDEFGHIJ'),  # 行索引\n",
    "                   columns=['Python', 'Math', 'En'],\n",
    "                   dtype=float)  # 列索引\n",
    "df1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-03T16:51:32.738904Z",
     "start_time": "2023-04-03T16:51:32.735345Z"
    },
    "pycharm": {
     "is_executing": true
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>66</td>\n",
       "      <td>88</td>\n",
       "      <td>100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>99</td>\n",
       "      <td>65</td>\n",
       "      <td>121</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>128</td>\n",
       "      <td>137</td>\n",
       "      <td>45</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math   En\n",
       "0      66    88  100\n",
       "1      99    65  121\n",
       "2     128   137   45"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = pd.DataFrame(\n",
    "    data={'Python': [66, 99, 128], 'Math': [88, 65, 137], 'En': [100, 121, 45]})  # 字典key是列索引，不执行的话，默认index从0开始\n",
    "df2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据查看"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "pycharm": {
     "is_executing": true
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>45</td>\n",
       "      <td>102</td>\n",
       "      <td>35</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>89</td>\n",
       "      <td>142</td>\n",
       "      <td>143</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>78</td>\n",
       "      <td>48</td>\n",
       "      <td>58</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>93</td>\n",
       "      <td>26</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>11</td>\n",
       "      <td>150</td>\n",
       "      <td>150</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>125</td>\n",
       "      <td>128</td>\n",
       "      <td>130</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>3</td>\n",
       "      <td>14</td>\n",
       "      <td>29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>82</td>\n",
       "      <td>60</td>\n",
       "      <td>106</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>103</td>\n",
       "      <td>65</td>\n",
       "      <td>147</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>83</td>\n",
       "      <td>19</td>\n",
       "      <td>114</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>100 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    Python  Math   En\n",
       "0       45   102   35\n",
       "1       89   142  143\n",
       "2       78    48   58\n",
       "3       93    26    1\n",
       "4       11   150  150\n",
       "..     ...   ...  ...\n",
       "95     125   128  130\n",
       "96       3    14   29\n",
       "97      82    60  106\n",
       "98     103    65  147\n",
       "99      83    19  114\n",
       "\n",
       "[100 rows x 3 columns]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(data=np.random.randint(0, 151, size=(100, 3)),\n",
    "                  columns=['Python', 'Math', 'En'])\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-04T11:25:26.244498Z",
     "start_time": "2023-04-04T11:25:26.233520Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(100, 3)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.shape  # 形状"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-04T11:25:34.372094Z",
     "start_time": "2023-04-04T11:25:34.365351Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>45</td>\n",
       "      <td>102</td>\n",
       "      <td>35</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>89</td>\n",
       "      <td>142</td>\n",
       "      <td>143</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>78</td>\n",
       "      <td>48</td>\n",
       "      <td>58</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>93</td>\n",
       "      <td>26</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>11</td>\n",
       "      <td>150</td>\n",
       "      <td>150</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math   En\n",
       "0      45   102   35\n",
       "1      89   142  143\n",
       "2      78    48   58\n",
       "3      93    26    1\n",
       "4      11   150  150"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-04T11:25:39.040505Z",
     "start_time": "2023-04-04T11:25:39.034744Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>125</td>\n",
       "      <td>128</td>\n",
       "      <td>130</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>3</td>\n",
       "      <td>14</td>\n",
       "      <td>29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>82</td>\n",
       "      <td>60</td>\n",
       "      <td>106</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>103</td>\n",
       "      <td>65</td>\n",
       "      <td>147</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>83</td>\n",
       "      <td>19</td>\n",
       "      <td>114</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Python  Math   En\n",
       "95     125   128  130\n",
       "96       3    14   29\n",
       "97      82    60  106\n",
       "98     103    65  147\n",
       "99      83    19  114"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-04T11:25:56.887283Z",
     "start_time": "2023-04-04T11:25:56.882450Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python    int64\n",
       "Math      int64\n",
       "En        int64\n",
       "dtype: object"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.dtypes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-04T11:26:10.403455Z",
     "start_time": "2023-04-04T11:26:10.401062Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 100 entries, 0 to 99\n",
      "Data columns (total 3 columns):\n",
      " #   Column  Non-Null Count  Dtype\n",
      "---  ------  --------------  -----\n",
      " 0   Python  100 non-null    int64\n",
      " 1   Math    100 non-null    int64\n",
      " 2   En      100 non-null    int64\n",
      "dtypes: int64(3)\n",
      "memory usage: 2.5 KB\n"
     ]
    }
   ],
   "source": [
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>100.000000</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>100.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>75.860000</td>\n",
       "      <td>74.000000</td>\n",
       "      <td>70.890000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>45.014031</td>\n",
       "      <td>42.965337</td>\n",
       "      <td>45.518316</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>37.750000</td>\n",
       "      <td>41.750000</td>\n",
       "      <td>29.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>84.000000</td>\n",
       "      <td>68.000000</td>\n",
       "      <td>65.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>117.250000</td>\n",
       "      <td>109.250000</td>\n",
       "      <td>110.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>150.000000</td>\n",
       "      <td>150.000000</td>\n",
       "      <td>150.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           Python        Math          En\n",
       "count  100.000000  100.000000  100.000000\n",
       "mean    75.860000   74.000000   70.890000\n",
       "std     45.014031   42.965337   45.518316\n",
       "min      3.000000    0.000000    0.000000\n",
       "25%     37.750000   41.750000   29.750000\n",
       "50%     84.000000   68.000000   65.500000\n",
       "75%    117.250000  109.250000  110.500000\n",
       "max    150.000000  150.000000  150.000000"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe()  # 描述：平均值、标准差、中位数、四等分、最大值、最小值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 45, 102,  35],\n",
       "       [ 89, 142, 143],\n",
       "       [ 78,  48,  58],\n",
       "       [ 93,  26,   1],\n",
       "       [ 11, 150, 150],\n",
       "       [  9,  51,  95],\n",
       "       [130,  64, 134],\n",
       "       [ 53,  43,  31],\n",
       "       [133, 119,  73],\n",
       "       [143,  27,  39],\n",
       "       [128,  41,   8],\n",
       "       [136, 140,  67],\n",
       "       [ 91,  66,  36],\n",
       "       [ 42,  78,  21],\n",
       "       [130, 118,  54],\n",
       "       [ 24, 144, 126],\n",
       "       [ 15,  28,  75],\n",
       "       [ 86,  42,  97],\n",
       "       [136,   0,  14],\n",
       "       [ 99,   1,  54],\n",
       "       [124,  41,  24],\n",
       "       [ 28,  58,  57],\n",
       "       [ 84,  74, 136],\n",
       "       [108,  71,  14],\n",
       "       [146,  98, 126],\n",
       "       [  7,  59, 139],\n",
       "       [115, 137,  60],\n",
       "       [ 14,  56,  97],\n",
       "       [ 88,  58,  76],\n",
       "       [ 38, 123,  24],\n",
       "       [117,   0,  42],\n",
       "       [ 45,  15, 102],\n",
       "       [ 58,  15,  43],\n",
       "       [ 13,  10,   3],\n",
       "       [ 14,  48,  63],\n",
       "       [ 97,  95,  85],\n",
       "       [ 21, 107, 127],\n",
       "       [ 38, 144, 108],\n",
       "       [ 18,  44,  43],\n",
       "       [ 41,  61, 146],\n",
       "       [109, 118, 139],\n",
       "       [ 71,  89,  93],\n",
       "       [ 84,  77,   8],\n",
       "       [ 37,  32, 145],\n",
       "       [123,  51,  20],\n",
       "       [118,  70,  28],\n",
       "       [ 44,   5,  43],\n",
       "       [117,  17, 114],\n",
       "       [143, 109, 144],\n",
       "       [ 87,  65,  14],\n",
       "       [ 25, 102,  98],\n",
       "       [117,  33, 136],\n",
       "       [132,  76,  11],\n",
       "       [123, 127,   3],\n",
       "       [ 20,  43,  21],\n",
       "       [109, 101, 110],\n",
       "       [ 18, 126,  32],\n",
       "       [133,  39, 113],\n",
       "       [121, 100,  51],\n",
       "       [124,  54, 112],\n",
       "       [ 98, 131,  95],\n",
       "       [ 54,   2,  10],\n",
       "       [ 20,  54, 115],\n",
       "       [120,  36, 138],\n",
       "       [ 54,  75,  77],\n",
       "       [ 78,  17, 113],\n",
       "       [ 27,  77,  40],\n",
       "       [ 66, 128,  21],\n",
       "       [ 46,  43,  14],\n",
       "       [100, 122,  91],\n",
       "       [ 52,  31,  35],\n",
       "       [127,  87,  58],\n",
       "       [ 46, 141,  16],\n",
       "       [113,  63,  56],\n",
       "       [  9,  94, 142],\n",
       "       [149, 110,  98],\n",
       "       [ 17,  27,  86],\n",
       "       [ 40, 145,  30],\n",
       "       [ 90,  99,  21],\n",
       "       [ 18, 150,   7],\n",
       "       [ 98,  49,  23],\n",
       "       [ 13,  85,  18],\n",
       "       [ 25,  37, 104],\n",
       "       [ 47,  74,  64],\n",
       "       [119,  65, 113],\n",
       "       [  9,   2,  89],\n",
       "       [128, 128,  81],\n",
       "       [ 97, 100,  76],\n",
       "       [ 45, 110,   0],\n",
       "       [146, 107,  37],\n",
       "       [150,  52,  57],\n",
       "       [ 11, 129, 136],\n",
       "       [ 98,  92,  54],\n",
       "       [ 86, 126,  87],\n",
       "       [ 54, 148, 100],\n",
       "       [125, 128, 130],\n",
       "       [  3,  14,  29],\n",
       "       [ 82,  60, 106],\n",
       "       [103,  65, 147],\n",
       "       [ 83,  19, 114]])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.values  # 返回的是numpy数组"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['Python', 'Math', 'En'], dtype='object')"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.columns  # 返回的是列索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "RangeIndex(start=0, stop=100, step=1)"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.index  # 返回的是行索引"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据输入和输出"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### CSV"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>22</td>\n",
       "      <td>14</td>\n",
       "      <td>117</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>86</td>\n",
       "      <td>125</td>\n",
       "      <td>115</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>70</td>\n",
       "      <td>44</td>\n",
       "      <td>108</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>49</td>\n",
       "      <td>26</td>\n",
       "      <td>26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>95</td>\n",
       "      <td>150</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>5</td>\n",
       "      <td>54</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>42</td>\n",
       "      <td>49</td>\n",
       "      <td>143</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>123</td>\n",
       "      <td>118</td>\n",
       "      <td>60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>17</td>\n",
       "      <td>137</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>7</td>\n",
       "      <td>31</td>\n",
       "      <td>106</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>100 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    Python  Math   En\n",
       "0       22    14  117\n",
       "1       86   125  115\n",
       "2       70    44  108\n",
       "3       49    26   26\n",
       "4       95   150    1\n",
       "..     ...   ...  ...\n",
       "95       5    54   13\n",
       "96      42    49  143\n",
       "97     123   118   60\n",
       "98      17   137   20\n",
       "99       7    31  106\n",
       "\n",
       "[100 rows x 3 columns]"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(data=np.random.randint(0, 151, size=(100, 3)),\n",
    "                  columns=['Python', 'Math', 'En'])\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.to_csv('./data.csv',  # 文件路径\n",
    "          sep=',',  # 分隔符\n",
    "          index=True,  # 行索引\n",
    "          header=True)  # 列索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>22</td>\n",
       "      <td>14</td>\n",
       "      <td>117</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>86</td>\n",
       "      <td>125</td>\n",
       "      <td>115</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>70</td>\n",
       "      <td>44</td>\n",
       "      <td>108</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>49</td>\n",
       "      <td>26</td>\n",
       "      <td>26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>95</td>\n",
       "      <td>150</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>5</td>\n",
       "      <td>54</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>42</td>\n",
       "      <td>49</td>\n",
       "      <td>143</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>123</td>\n",
       "      <td>118</td>\n",
       "      <td>60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>17</td>\n",
       "      <td>137</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>7</td>\n",
       "      <td>31</td>\n",
       "      <td>106</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>100 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    Python  Math   En\n",
       "0       22    14  117\n",
       "1       86   125  115\n",
       "2       70    44  108\n",
       "3       49    26   26\n",
       "4       95   150    1\n",
       "..     ...   ...  ...\n",
       "95       5    54   13\n",
       "96      42    49  143\n",
       "97     123   118   60\n",
       "98      17   137   20\n",
       "99       7    31  106\n",
       "\n",
       "[100 rows x 3 columns]"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.read_csv('./data.csv', index_col=0, header=0)  # 读取csv文件，第一列为行索引\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Excel"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "需要安装依赖\n",
    "\n",
    "pip install xlrd\n",
    "\n",
    "pip install xlwt\n",
    "\n",
    "pip install openpyxl"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.to_excel('./data.xlsx')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>22</td>\n",
       "      <td>14</td>\n",
       "      <td>117</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>86</td>\n",
       "      <td>125</td>\n",
       "      <td>115</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>70</td>\n",
       "      <td>44</td>\n",
       "      <td>108</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>49</td>\n",
       "      <td>26</td>\n",
       "      <td>26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>95</td>\n",
       "      <td>150</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>5</td>\n",
       "      <td>54</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>42</td>\n",
       "      <td>49</td>\n",
       "      <td>143</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>123</td>\n",
       "      <td>118</td>\n",
       "      <td>60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>17</td>\n",
       "      <td>137</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>7</td>\n",
       "      <td>31</td>\n",
       "      <td>106</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>100 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    Python  Math   En\n",
       "0       22    14  117\n",
       "1       86   125  115\n",
       "2       70    44  108\n",
       "3       49    26   26\n",
       "4       95   150    1\n",
       "..     ...   ...  ...\n",
       "95       5    54   13\n",
       "96      42    49  143\n",
       "97     123   118   60\n",
       "98      17   137   20\n",
       "99       7    31  106\n",
       "\n",
       "[100 rows x 3 columns]"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.read_excel('./data.xlsx', index_col=0, header=0)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### HDF5"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "需要安装依赖\n",
    "\n",
    "conda install pytables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.to_hdf('./data.h5', key='score')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>22</td>\n",
       "      <td>14</td>\n",
       "      <td>117</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>86</td>\n",
       "      <td>125</td>\n",
       "      <td>115</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>70</td>\n",
       "      <td>44</td>\n",
       "      <td>108</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>49</td>\n",
       "      <td>26</td>\n",
       "      <td>26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>95</td>\n",
       "      <td>150</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>5</td>\n",
       "      <td>54</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>42</td>\n",
       "      <td>49</td>\n",
       "      <td>143</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>123</td>\n",
       "      <td>118</td>\n",
       "      <td>60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>17</td>\n",
       "      <td>137</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>7</td>\n",
       "      <td>31</td>\n",
       "      <td>106</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>100 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    Python  Math   En\n",
       "0       22    14  117\n",
       "1       86   125  115\n",
       "2       70    44  108\n",
       "3       49    26   26\n",
       "4       95   150    1\n",
       "..     ...   ...  ...\n",
       "95       5    54   13\n",
       "96      42    49  143\n",
       "97     123   118   60\n",
       "98      17   137   20\n",
       "99       7    31  106\n",
       "\n",
       "[100 rows x 3 columns]"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.read_hdf('./data.h5', key='score')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### mysql"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "需要安装依赖\n",
    "\n",
    "pip install sqlalchemy\n",
    "\n",
    "pip install pymysql\n",
    "\n",
    "pip install psycopg2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sqlalchemy import create_engine, text\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "engine = create_engine(\n",
    "    'postgresql+psycopg2://postgres:123456@localhost:5432/postgres')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "# df.to_sql('score', engine, index=False)  # 将dataframe转换为sql表\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>29</td>\n",
       "      <td>91</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>55</td>\n",
       "      <td>14</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>116</td>\n",
       "      <td>82</td>\n",
       "      <td>97</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>147</td>\n",
       "      <td>120</td>\n",
       "      <td>148</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>12</td>\n",
       "      <td>143</td>\n",
       "      <td>126</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>69</td>\n",
       "      <td>38</td>\n",
       "      <td>115</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>64</td>\n",
       "      <td>21</td>\n",
       "      <td>150</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>94</td>\n",
       "      <td>70</td>\n",
       "      <td>97</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>103</td>\n",
       "      <td>114</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>82</td>\n",
       "      <td>64</td>\n",
       "      <td>138</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>100 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    Python  Math   En\n",
       "0       29    91   15\n",
       "1       55    14    5\n",
       "2      116    82   97\n",
       "3      147   120  148\n",
       "4       12   143  126\n",
       "..     ...   ...  ...\n",
       "95      69    38  115\n",
       "96      64    21  150\n",
       "97      94    70   97\n",
       "98     103   114   12\n",
       "99      82    64  138\n",
       "\n",
       "[100 rows x 3 columns]"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = pd.read_sql(text('select * from score'),\n",
    "                  engine.connect())  # 将sql表转换为dataframe\n",
    "df2\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据选取"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 获取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>101</td>\n",
       "      <td>66</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>90</td>\n",
       "      <td>137</td>\n",
       "      <td>72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>127</td>\n",
       "      <td>94</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>78</td>\n",
       "      <td>125</td>\n",
       "      <td>43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>44</td>\n",
       "      <td>119</td>\n",
       "      <td>118</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>141</td>\n",
       "      <td>86</td>\n",
       "      <td>102</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>39</td>\n",
       "      <td>54</td>\n",
       "      <td>116</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>135</td>\n",
       "      <td>27</td>\n",
       "      <td>129</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>15</td>\n",
       "      <td>111</td>\n",
       "      <td>139</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>24</td>\n",
       "      <td>108</td>\n",
       "      <td>99</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math   En\n",
       "A     101    66    0\n",
       "B      90   137   72\n",
       "C     127    94    3\n",
       "D      78   125   43\n",
       "E      44   119  118\n",
       "F     141    86  102\n",
       "G      39    54  116\n",
       "H     135    27  129\n",
       "I      15   111  139\n",
       "J      24   108   99"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(data=np.random.randint(0, 151, size=(10, 3)),\n",
    "                  columns=['Python', 'Math', 'En'],\n",
    "                  index=list('ABCDEFGHIJ'))\n",
    "df\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A    101\n",
       "B     90\n",
       "C    127\n",
       "D     78\n",
       "E     44\n",
       "F    141\n",
       "G     39\n",
       "H    135\n",
       "I     15\n",
       "J     24\n",
       "Name: Python, dtype: int64"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['Python']\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A    101\n",
       "B     90\n",
       "C    127\n",
       "D     78\n",
       "E     44\n",
       "F    141\n",
       "G     39\n",
       "H    135\n",
       "I     15\n",
       "J     24\n",
       "Name: Python, dtype: int64"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.Python  # 列索引表示属性\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>101</td>\n",
       "      <td>66</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>90</td>\n",
       "      <td>137</td>\n",
       "      <td>72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>127</td>\n",
       "      <td>94</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>78</td>\n",
       "      <td>125</td>\n",
       "      <td>43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>44</td>\n",
       "      <td>119</td>\n",
       "      <td>118</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>141</td>\n",
       "      <td>86</td>\n",
       "      <td>102</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>39</td>\n",
       "      <td>54</td>\n",
       "      <td>116</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>135</td>\n",
       "      <td>27</td>\n",
       "      <td>129</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>15</td>\n",
       "      <td>111</td>\n",
       "      <td>139</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>24</td>\n",
       "      <td>108</td>\n",
       "      <td>99</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math   En\n",
       "A     101    66    0\n",
       "B      90   137   72\n",
       "C     127    94    3\n",
       "D      78   125   43\n",
       "E      44   119  118\n",
       "F     141    86  102\n",
       "G      39    54  116\n",
       "H     135    27  129\n",
       "I      15   111  139\n",
       "J      24   108   99"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[['Python', 'Math', 'En']]  # 获取多列\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 标签选择"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>101</td>\n",
       "      <td>66</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>90</td>\n",
       "      <td>137</td>\n",
       "      <td>72</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math  En\n",
       "A     101    66   0\n",
       "B      90   137  72"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc[['A', 'B']]  # 标签就是行索引\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "101"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc['A', 'Python']\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A    101\n",
       "B     90\n",
       "C    127\n",
       "Name: Python, dtype: int64"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc[['A', 'B', 'C'], 'Python']\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>66</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>94</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>119</td>\n",
       "      <td>118</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>54</td>\n",
       "      <td>116</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>111</td>\n",
       "      <td>139</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Math   En\n",
       "A    66    0\n",
       "C    94    3\n",
       "E   119  118\n",
       "G    54  116\n",
       "I   111  139"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc['A'::2, ['Math', 'En']]\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 位置选择"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python    101\n",
       "Math       66\n",
       "En          0\n",
       "Name: A, dtype: int64"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[0]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>101</td>\n",
       "      <td>66</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>127</td>\n",
       "      <td>94</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>44</td>\n",
       "      <td>119</td>\n",
       "      <td>118</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math   En\n",
       "A     101    66    0\n",
       "C     127    94    3\n",
       "E      44   119  118"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[[0, 2, 4]]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>101</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>90</td>\n",
       "      <td>72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>127</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>78</td>\n",
       "      <td>43</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  En\n",
       "A     101   0\n",
       "B      90  72\n",
       "C     127   3\n",
       "D      78  43"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[0:4, [0, 2]]\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### boolean索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>101</td>\n",
       "      <td>66</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>90</td>\n",
       "      <td>137</td>\n",
       "      <td>72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>127</td>\n",
       "      <td>94</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>78</td>\n",
       "      <td>125</td>\n",
       "      <td>43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>141</td>\n",
       "      <td>86</td>\n",
       "      <td>102</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>135</td>\n",
       "      <td>27</td>\n",
       "      <td>129</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math   En\n",
       "A     101    66    0\n",
       "B      90   137   72\n",
       "C     127    94    3\n",
       "D      78   125   43\n",
       "F     141    86  102\n",
       "H     135    27  129"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cond = df.Python > 60\n",
    "df[cond]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>90</td>\n",
       "      <td>137</td>\n",
       "      <td>72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>78</td>\n",
       "      <td>125</td>\n",
       "      <td>43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>44</td>\n",
       "      <td>119</td>\n",
       "      <td>118</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>141</td>\n",
       "      <td>86</td>\n",
       "      <td>102</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>135</td>\n",
       "      <td>27</td>\n",
       "      <td>129</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>15</td>\n",
       "      <td>111</td>\n",
       "      <td>139</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>24</td>\n",
       "      <td>108</td>\n",
       "      <td>99</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math   En\n",
       "B      90   137   72\n",
       "D      78   125   43\n",
       "E      44   119  118\n",
       "F     141    86  102\n",
       "H     135    27  129\n",
       "I      15   111  139\n",
       "J      24   108   99"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cond = df.mean(axis=1) > 75\n",
    "df[cond]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>90</td>\n",
       "      <td>137</td>\n",
       "      <td>72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>127</td>\n",
       "      <td>94</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>78</td>\n",
       "      <td>125</td>\n",
       "      <td>43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>141</td>\n",
       "      <td>86</td>\n",
       "      <td>102</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math   En\n",
       "B      90   137   72\n",
       "C     127    94    3\n",
       "D      78   125   43\n",
       "F     141    86  102"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cond = (df.Python > 70) & (df.Math > 70)\n",
    "df[cond]\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 赋值操作"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python    150\n",
       "Math       66\n",
       "En          0\n",
       "Name: A, dtype: int64"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['Python']['A'] = 150  # 修改某个位置的值\n",
    "df.loc['A']\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "      <th>JAVA</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>150</td>\n",
       "      <td>66</td>\n",
       "      <td>0</td>\n",
       "      <td>103</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>90</td>\n",
       "      <td>137</td>\n",
       "      <td>72</td>\n",
       "      <td>138</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>127</td>\n",
       "      <td>94</td>\n",
       "      <td>3</td>\n",
       "      <td>72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>78</td>\n",
       "      <td>125</td>\n",
       "      <td>43</td>\n",
       "      <td>93</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>44</td>\n",
       "      <td>119</td>\n",
       "      <td>118</td>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>141</td>\n",
       "      <td>86</td>\n",
       "      <td>102</td>\n",
       "      <td>56</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>39</td>\n",
       "      <td>54</td>\n",
       "      <td>116</td>\n",
       "      <td>60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>135</td>\n",
       "      <td>27</td>\n",
       "      <td>129</td>\n",
       "      <td>87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>15</td>\n",
       "      <td>111</td>\n",
       "      <td>139</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>24</td>\n",
       "      <td>108</td>\n",
       "      <td>99</td>\n",
       "      <td>36</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math   En  JAVA\n",
       "A     150    66    0   103\n",
       "B      90   137   72   138\n",
       "C     127    94    3    72\n",
       "D      78   125   43    93\n",
       "E      44   119  118    30\n",
       "F     141    86  102    56\n",
       "G      39    54  116    60\n",
       "H     135    27  129    87\n",
       "I      15   111  139     4\n",
       "J      24   108   99    36"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['JAVA'] = np.random.randint(0, 151, size=10)  # 增加一列JAVA\n",
    "df\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "      <th>JAVA</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>150</td>\n",
       "      <td>66</td>\n",
       "      <td>0</td>\n",
       "      <td>103</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>90</td>\n",
       "      <td>147</td>\n",
       "      <td>72</td>\n",
       "      <td>138</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>127</td>\n",
       "      <td>147</td>\n",
       "      <td>3</td>\n",
       "      <td>72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>78</td>\n",
       "      <td>125</td>\n",
       "      <td>43</td>\n",
       "      <td>93</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>44</td>\n",
       "      <td>119</td>\n",
       "      <td>118</td>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>141</td>\n",
       "      <td>86</td>\n",
       "      <td>102</td>\n",
       "      <td>56</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>39</td>\n",
       "      <td>54</td>\n",
       "      <td>116</td>\n",
       "      <td>60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>135</td>\n",
       "      <td>27</td>\n",
       "      <td>129</td>\n",
       "      <td>87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>15</td>\n",
       "      <td>111</td>\n",
       "      <td>139</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>24</td>\n",
       "      <td>108</td>\n",
       "      <td>99</td>\n",
       "      <td>36</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math   En  JAVA\n",
       "A     150    66    0   103\n",
       "B      90   147   72   138\n",
       "C     127   147    3    72\n",
       "D      78   125   43    93\n",
       "E      44   119  118    30\n",
       "F     141    86  102    56\n",
       "G      39    54  116    60\n",
       "H     135    27  129    87\n",
       "I      15   111  139     4\n",
       "J      24   108   99    36"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc[['B', 'C'], 'Math'] = 147  # 修改多列\n",
    "df\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据集成"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### concat"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "df1 = pd.DataFrame(data=np.random.randint(0, 151, size=(10, 3)),\n",
    "                   columns=['Python', 'Math', 'En'])\n",
    "df2 = pd.DataFrame(data=np.random.randint(0, 151, size=(10, 3)),\n",
    "                   columns=['Python', 'Math', 'En'])\n",
    "df3 = pd.DataFrame(data=np.random.randint(0, 151, size=(10, 2)),\n",
    "                   columns=['Java', 'Chinese'])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>103</td>\n",
       "      <td>9</td>\n",
       "      <td>120</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>25</td>\n",
       "      <td>97</td>\n",
       "      <td>29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>39</td>\n",
       "      <td>96</td>\n",
       "      <td>57</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>137</td>\n",
       "      <td>34</td>\n",
       "      <td>150</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>60</td>\n",
       "      <td>134</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>96</td>\n",
       "      <td>32</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>89</td>\n",
       "      <td>61</td>\n",
       "      <td>123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>18</td>\n",
       "      <td>26</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>39</td>\n",
       "      <td>133</td>\n",
       "      <td>33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>42</td>\n",
       "      <td>83</td>\n",
       "      <td>26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>26</td>\n",
       "      <td>125</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>33</td>\n",
       "      <td>100</td>\n",
       "      <td>131</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>88</td>\n",
       "      <td>150</td>\n",
       "      <td>54</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>54</td>\n",
       "      <td>135</td>\n",
       "      <td>52</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>98</td>\n",
       "      <td>33</td>\n",
       "      <td>104</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>16</td>\n",
       "      <td>149</td>\n",
       "      <td>136</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>112</td>\n",
       "      <td>74</td>\n",
       "      <td>81</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>59</td>\n",
       "      <td>73</td>\n",
       "      <td>141</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>78</td>\n",
       "      <td>5</td>\n",
       "      <td>123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>84</td>\n",
       "      <td>51</td>\n",
       "      <td>136</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math   En\n",
       "0     103     9  120\n",
       "1      25    97   29\n",
       "2      39    96   57\n",
       "3     137    34  150\n",
       "4      60   134   18\n",
       "5      96    32   19\n",
       "6      89    61  123\n",
       "7      18    26   23\n",
       "8      39   133   33\n",
       "9      42    83   26\n",
       "0      26   125    6\n",
       "1      33   100  131\n",
       "2      88   150   54\n",
       "3      54   135   52\n",
       "4      98    33  104\n",
       "5      16   149  136\n",
       "6     112    74   81\n",
       "7      59    73  141\n",
       "8      78     5  123\n",
       "9      84    51  136"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.concat([df1, df2], axis=0)  # 行增加\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "      <th>Java</th>\n",
       "      <th>Chinese</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>103</td>\n",
       "      <td>9</td>\n",
       "      <td>120</td>\n",
       "      <td>102</td>\n",
       "      <td>109</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>25</td>\n",
       "      <td>97</td>\n",
       "      <td>29</td>\n",
       "      <td>46</td>\n",
       "      <td>135</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>39</td>\n",
       "      <td>96</td>\n",
       "      <td>57</td>\n",
       "      <td>2</td>\n",
       "      <td>36</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>137</td>\n",
       "      <td>34</td>\n",
       "      <td>150</td>\n",
       "      <td>108</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>60</td>\n",
       "      <td>134</td>\n",
       "      <td>18</td>\n",
       "      <td>123</td>\n",
       "      <td>70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>96</td>\n",
       "      <td>32</td>\n",
       "      <td>19</td>\n",
       "      <td>105</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>89</td>\n",
       "      <td>61</td>\n",
       "      <td>123</td>\n",
       "      <td>12</td>\n",
       "      <td>24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>18</td>\n",
       "      <td>26</td>\n",
       "      <td>23</td>\n",
       "      <td>71</td>\n",
       "      <td>48</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>39</td>\n",
       "      <td>133</td>\n",
       "      <td>33</td>\n",
       "      <td>67</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>42</td>\n",
       "      <td>83</td>\n",
       "      <td>26</td>\n",
       "      <td>78</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math   En  Java  Chinese\n",
       "0     103     9  120   102      109\n",
       "1      25    97   29    46      135\n",
       "2      39    96   57     2       36\n",
       "3     137    34  150   108       19\n",
       "4      60   134   18   123       70\n",
       "5      96    32   19   105        0\n",
       "6      89    61  123    12       24\n",
       "7      18    26   23    71       48\n",
       "8      39   133   33    67        8\n",
       "9      42    83   26    78       12"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.concat([df1, df3], axis=1)  # 列增加\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据插入"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [],
   "source": [
    "df1.insert(loc=1,  # 插入位置\n",
    "           column='C++',  # 插入的列名\n",
    "           value=np.random.randint(0, 151, size=10))  # 插入数据\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### SQL join"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "df1 = pd.DataFrame(data={'name': ['softpo', 'Brandon', 'Ella', 'Daniel', '张三'],\n",
    "                         'height': [175, 180, 169, 177, 168]})\n",
    "df2 = pd.DataFrame(data={'name': ['softpo', 'Brandon', 'Ella', 'Daniel', '李四'],\n",
    "                         'weight': [70, 65, 74, 63, 88]})\n",
    "df3 = pd.DataFrame(data={'姓名': ['softpo', 'Brandon', 'Ella', 'Daniel', '张三'],\n",
    "                         'salary': np.random.randint(20, 100, size=5)})\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>name</th>\n",
       "      <th>height</th>\n",
       "      <th>weight</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>softpo</td>\n",
       "      <td>175</td>\n",
       "      <td>70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Brandon</td>\n",
       "      <td>180</td>\n",
       "      <td>65</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Ella</td>\n",
       "      <td>169</td>\n",
       "      <td>74</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Daniel</td>\n",
       "      <td>177</td>\n",
       "      <td>63</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      name  height  weight\n",
       "0   softpo     175      70\n",
       "1  Brandon     180      65\n",
       "2     Ella     169      74\n",
       "3   Daniel     177      63"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 根据共同的属性合并\n",
    "pd.merge(df1, df2)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>name</th>\n",
       "      <th>height</th>\n",
       "      <th>weight</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>softpo</td>\n",
       "      <td>175.0</td>\n",
       "      <td>70.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Brandon</td>\n",
       "      <td>180.0</td>\n",
       "      <td>65.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Ella</td>\n",
       "      <td>169.0</td>\n",
       "      <td>74.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Daniel</td>\n",
       "      <td>177.0</td>\n",
       "      <td>63.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>张三</td>\n",
       "      <td>168.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>李四</td>\n",
       "      <td>NaN</td>\n",
       "      <td>88.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      name  height  weight\n",
       "0   softpo   175.0    70.0\n",
       "1  Brandon   180.0    65.0\n",
       "2     Ella   169.0    74.0\n",
       "3   Daniel   177.0    63.0\n",
       "4       张三   168.0     NaN\n",
       "5       李四     NaN    88.0"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.merge(df1, df2, how='outer')  # 外连接\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>name</th>\n",
       "      <th>height</th>\n",
       "      <th>姓名</th>\n",
       "      <th>salary</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>softpo</td>\n",
       "      <td>175</td>\n",
       "      <td>softpo</td>\n",
       "      <td>74</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Brandon</td>\n",
       "      <td>180</td>\n",
       "      <td>Brandon</td>\n",
       "      <td>85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Ella</td>\n",
       "      <td>169</td>\n",
       "      <td>Ella</td>\n",
       "      <td>38</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Daniel</td>\n",
       "      <td>177</td>\n",
       "      <td>Daniel</td>\n",
       "      <td>44</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>张三</td>\n",
       "      <td>168</td>\n",
       "      <td>张三</td>\n",
       "      <td>72</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      name  height       姓名  salary\n",
       "0   softpo     175   softpo      74\n",
       "1  Brandon     180  Brandon      85\n",
       "2     Ella     169     Ella      38\n",
       "3   Daniel     177   Daniel      44\n",
       "4       张三     168       张三      72"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.merge(df1, df3, left_on='name', right_on='姓名')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [],
   "source": [
    "df4 = pd.DataFrame(data=np.random.randint(0, 151, size=(10, 3)),\n",
    "                   columns=['Python', 'Math', 'En'])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0     70.3\n",
       "1     82.7\n",
       "2     85.7\n",
       "3     52.3\n",
       "4    104.0\n",
       "5    107.0\n",
       "6     44.7\n",
       "7     85.3\n",
       "8     69.7\n",
       "9     79.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "score_mean = df4.mean(axis=1).round(1)\n",
    "score_mean\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "df4.insert(loc=2, column='Mean', value=score_mean)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [],
   "source": [
    "df5 = df4.iloc[:, [0, 1, 3]]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "      <th>Mean</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>117</td>\n",
       "      <td>54</td>\n",
       "      <td>40</td>\n",
       "      <td>70.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>125</td>\n",
       "      <td>117</td>\n",
       "      <td>6</td>\n",
       "      <td>82.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>67</td>\n",
       "      <td>109</td>\n",
       "      <td>81</td>\n",
       "      <td>85.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>42</td>\n",
       "      <td>71</td>\n",
       "      <td>44</td>\n",
       "      <td>52.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>121</td>\n",
       "      <td>138</td>\n",
       "      <td>53</td>\n",
       "      <td>104.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>45</td>\n",
       "      <td>132</td>\n",
       "      <td>144</td>\n",
       "      <td>107.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>54</td>\n",
       "      <td>55</td>\n",
       "      <td>25</td>\n",
       "      <td>44.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>46</td>\n",
       "      <td>134</td>\n",
       "      <td>76</td>\n",
       "      <td>85.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>121</td>\n",
       "      <td>44</td>\n",
       "      <td>44</td>\n",
       "      <td>69.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>79</td>\n",
       "      <td>123</td>\n",
       "      <td>35</td>\n",
       "      <td>79.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math   En   Mean\n",
       "0     117    54   40   70.3\n",
       "1     125   117    6   82.7\n",
       "2      67   109   81   85.7\n",
       "3      42    71   44   52.3\n",
       "4     121   138   53  104.0\n",
       "5      45   132  144  107.0\n",
       "6      54    55   25   44.7\n",
       "7      46   134   76   85.3\n",
       "8     121    44   44   69.7\n",
       "9      79   123   35   79.0"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "score_mean.name = 'Mean'\n",
    "pd.merge(df5, score_mean,\n",
    "         left_index=True, right_index=True)  # 根据行索引对应\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据清洗"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>red</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>blue</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>red</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>green</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>green</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>blue</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>None</td>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>NaN</td>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>green</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   color  price\n",
       "0    red     20\n",
       "1   blue     15\n",
       "2    red     20\n",
       "3  green     18\n",
       "4  green     18\n",
       "5   blue     22\n",
       "6   None     30\n",
       "7    NaN     30\n",
       "8  green     22"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(data={'color': ['red', 'blue', 'red', 'green', 'green', 'blue', None, np.NaN, 'green'],\n",
    "                        'price': [20, 15, 20, 18, 18, 22, 30, 30, 22]})\n",
    "df\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>red</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>blue</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>green</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>blue</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>None</td>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>green</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   color  price\n",
       "0    red     20\n",
       "1   blue     15\n",
       "3  green     18\n",
       "5   blue     22\n",
       "6   None     30\n",
       "8  green     22"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.drop_duplicates()  # 去重\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>red</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>blue</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>red</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>green</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>green</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>blue</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>green</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   color  price\n",
       "0    red     20\n",
       "1   blue     15\n",
       "2    red     20\n",
       "3  green     18\n",
       "4  green     18\n",
       "5   blue     22\n",
       "8  green     22"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.dropna()  # 过滤空数据\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>red</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>blue</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>green</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>blue</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>NaN</td>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   color  price\n",
       "0    red     20\n",
       "1   blue     15\n",
       "3  green     18\n",
       "5   blue     22\n",
       "7    NaN     30"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.drop(labels=[2, 4, 6, 8])  # 删除行\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   price\n",
       "0     20\n",
       "1     15\n",
       "2     20\n",
       "3     18\n",
       "4     18\n",
       "5     22\n",
       "6     30\n",
       "7     30\n",
       "8     22"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.drop(labels='color', axis=1)  # 删除列\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   price\n",
       "0     20\n",
       "1     15\n",
       "2     20\n",
       "3     18\n",
       "4     18\n",
       "5     22\n",
       "6     30\n",
       "7     30\n",
       "8     22"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.filter(items=['price'])  # 过滤\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>color</th>\n",
       "      <th>price</th>\n",
       "      <th>size</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>red</td>\n",
       "      <td>20</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>blue</td>\n",
       "      <td>15</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>red</td>\n",
       "      <td>20</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>green</td>\n",
       "      <td>18</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>green</td>\n",
       "      <td>18</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>blue</td>\n",
       "      <td>22</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>None</td>\n",
       "      <td>30</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>NaN</td>\n",
       "      <td>30</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>green</td>\n",
       "      <td>22</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   color  price  size\n",
       "0    red     20  1024\n",
       "1   blue     15  1024\n",
       "2    red     20  1024\n",
       "3  green     18  1024\n",
       "4  green     18  1024\n",
       "5   blue     22  1024\n",
       "6   None     30  1024\n",
       "7    NaN     30  1024\n",
       "8  green     22  1024"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['size'] = 1024\n",
    "df\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>price</th>\n",
       "      <th>size</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>20</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>15</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>20</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>18</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>18</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>22</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>30</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>30</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>22</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   price  size\n",
       "0     20  1024\n",
       "1     15  1024\n",
       "2     20  1024\n",
       "3     18  1024\n",
       "4     18  1024\n",
       "5     22  1024\n",
       "6     30  1024\n",
       "7     30  1024\n",
       "8     22  1024"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.filter(like='i')  # 模糊匹配\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>price</th>\n",
       "      <th>size</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>20</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>15</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>20</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>18</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>18</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>22</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>30</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>30</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>22</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   price  size\n",
       "0     20  1024\n",
       "1     15  1024\n",
       "2     20  1024\n",
       "3     18  1024\n",
       "4     18  1024\n",
       "5     22  1024\n",
       "6     30  1024\n",
       "7     30  1024\n",
       "8     22  1024"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.filter(regex='e$')  # 正则表达式\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([967, 477,  24, 686, 136,  95, 486, 171, 885, 249, 342, 978, 166,\n",
       "       791, 117, 815, 589, 241, 125, 188, 276, 753, 393, 425, 537, 837,\n",
       "        88, 879, 662, 576, 903, 513, 378, 398, 863,  35, 406, 727, 904,\n",
       "       979, 713, 655, 915, 605, 360, 872, 188, 712, 192, 750, 638, 134,\n",
       "       328, 190, 175, 845, 607, 585, 684, 236, 184, 192, 889, 478, 210,\n",
       "       360, 734, 900, 808, 603, 306, 297, 155, 593, 616, 995, 637, 460,\n",
       "       689, 406, 853, 718, 627, 851, 484, 609, 272, 906, 394, 467, 641,\n",
       "       477,  54, 953, 639, 536, 243, 510, 226, 268, 411, 978, 969, 695,\n",
       "       141, 159, 699, 786, 482,  91,  73, 970, 585, 846, 726, 945, 903,\n",
       "        44, 980, 143, 430, 620, 344, 853, 170,  32, 500, 985, 704,  84,\n",
       "       453, 626, 358,  98, 234,  12, 572, 327, 866, 142, 294, 861, 202,\n",
       "       306, 864,  88,  52, 527, 216, 335, 726, 372,  37, 604, 866, 438,\n",
       "       113, 196, 938, 705, 673, 184, 299, 192, 507, 862, 586, 537, 938,\n",
       "       775, 967, 956, 415,  27, 349, 761,  81, 950, 828, 754, 390, 782,\n",
       "       399, 705, 301, 856, 438, 711, 372, 353, 430,  38,  18, 833, 274,\n",
       "       153, 840, 802, 747, 102])"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.random.randint(0, 1000, size=200)\n",
    "a\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([477, 686, 136, 486, 171, 249, 342, 166, 791, 117, 589, 241, 125,\n",
       "       188, 276, 753, 393, 425, 537, 662, 576, 513, 378, 398, 406, 727,\n",
       "       713, 655, 605, 360, 188, 712, 192, 750, 638, 134, 328, 190, 175,\n",
       "       607, 585, 684, 236, 184, 192, 478, 210, 360, 734, 603, 306, 297,\n",
       "       155, 593, 616, 637, 460, 689, 406, 718, 627, 484, 609, 272, 394,\n",
       "       467, 641, 477, 639, 536, 243, 510, 226, 268, 411, 695, 141, 159,\n",
       "       699, 786, 482, 585, 726, 143, 430, 620, 344, 170, 500, 704, 453,\n",
       "       626, 358, 234, 572, 327, 142, 294, 202, 306, 527, 216, 335, 726,\n",
       "       372, 604, 438, 113, 196, 705, 673, 184, 299, 192, 507, 586, 537,\n",
       "       775, 415, 349, 761, 754, 390, 782, 399, 705, 301, 438, 711, 372,\n",
       "       353, 430, 274, 153, 747, 102])"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cond = (a <= 800) & (a >= 100)\n",
    "a[cond]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-0.58420685,  1.62235943, -1.22281883, ...,  1.92242903,\n",
       "       -2.10001451,  1.32146555])"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b = np.random.randn(100000)\n",
    "b\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$3\\sigma$$\n",
    "过滤异常值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 3.00100948,  3.47385257,  3.00441102,  3.59979082,  3.00245444,\n",
       "       -3.3332552 ,  3.64645014,  4.17113304,  3.17620815,  3.29477894,\n",
       "        3.09104782, -3.21048769,  3.80526558,  3.07059167, -3.19434967,\n",
       "       -3.01434061,  3.1728744 ,  3.22945049, -3.20369253, -3.13551224,\n",
       "        3.05115335, -3.55196074, -3.2010347 ,  3.09411192,  3.0540035 ,\n",
       "        3.03234185,  3.11124832, -3.17083137,  3.30980279, -3.24494918,\n",
       "       -3.32904831, -3.34874107,  3.11046386, -3.49654953,  3.03346455,\n",
       "       -3.59347531, -3.00954269,  3.02990852,  3.00584234,  3.28454421,\n",
       "       -3.1356923 ,  3.10487462,  3.23264809,  3.12647749, -3.00960157,\n",
       "        3.0884975 ,  3.03053769, -3.32326448, -3.05653451, -3.26878215,\n",
       "        3.22003513,  3.80426247,  3.00533042,  3.38187979,  3.02618948,\n",
       "       -3.39723263,  3.70951014,  3.71607344,  3.04832819, -3.15502601,\n",
       "        3.15256441, -3.53828734,  3.32057574, -3.05672942, -3.07560945,\n",
       "       -3.18827095, -3.00611352,  3.70983309, -3.45495692, -3.61919796,\n",
       "        3.33129246, -3.02492149,  3.24856069,  3.09768776,  3.45740826,\n",
       "       -3.04578238,  3.09838086, -3.47787234, -3.07176455, -3.34098019,\n",
       "        3.01596819, -3.45671974, -3.04389724, -3.04685745, -3.17154772,\n",
       "        3.08269467, -3.12901462,  3.22180115, -3.66973126,  3.08086083,\n",
       "        3.42454115, -3.04674227,  3.07590334, -3.34899895,  3.19944035,\n",
       "        3.34759072, -3.07591093, -3.10293412,  3.01818107, -3.15650857,\n",
       "       -3.0908134 ,  3.91675271, -3.36973852, -3.19169003, -3.46028248,\n",
       "        3.02353669,  3.39985638,  3.41843528,  3.14362184,  3.12726866,\n",
       "        3.14497511, -3.34271938, -3.51905167, -3.39576227,  3.09293852,\n",
       "       -3.4137851 ,  3.0900975 ,  3.48593127, -3.16289298, -3.35179051,\n",
       "       -3.02140169, -3.13841314,  3.01620636,  3.02766484, -3.07537029,\n",
       "        3.1000822 ,  3.6533038 , -3.31359109,  3.03467009, -3.36901029,\n",
       "        3.01111457, -3.01143372,  3.20722017, -3.41022972,  3.35944263,\n",
       "       -3.0757881 ,  3.66419161, -3.00173677, -3.17398422,  3.53340837,\n",
       "        3.03550859, -3.03767527,  3.01297268,  3.0994981 ,  3.47399968,\n",
       "       -3.05758114,  3.12756157,  3.19201977,  3.023642  , -3.2583492 ,\n",
       "       -3.13361409,  3.36017667,  3.65933787,  3.19575873, -3.75920619,\n",
       "       -3.27396039,  3.00788985,  3.18215621,  3.05374084,  3.37392975,\n",
       "        3.02925319, -3.27453517,  3.16658163,  3.31618479, -3.05803644,\n",
       "       -4.16967896, -3.58637901,  3.00918495, -3.05604523, -3.18822143,\n",
       "       -3.28326318, -3.22940469,  3.36937139, -3.05999466,  3.00069755,\n",
       "       -3.29230431, -3.2692593 ,  3.77126042, -3.24427653,  3.07289034,\n",
       "        3.12921165,  3.074547  ,  3.07991094, -3.06034664, -3.07190807,\n",
       "       -4.21765476,  3.37670688, -3.03763626, -3.59857391, -3.66674821,\n",
       "       -3.21423394, -3.46497825, -3.73462205, -4.10324388, -3.00573154,\n",
       "       -3.28627767, -3.22167955, -4.0111397 , -3.38627192, -3.02142526,\n",
       "        3.03181451, -3.13611986,  3.1856735 , -3.59998988, -3.14618834,\n",
       "       -3.11624963, -3.06450797,  3.50989472, -3.24884527,  3.25908997,\n",
       "        3.09441912, -3.80893197,  3.06353933,  3.06251941, -3.24502828,\n",
       "       -3.63828859,  3.0458548 , -3.08385423, -3.3673219 ,  3.05690325,\n",
       "       -3.04272243, -3.16160514,  3.21256474, -3.25075844,  3.30293025,\n",
       "        3.07361177, -3.02884613,  3.37440108,  3.35451307,  3.18036912,\n",
       "       -3.04126213, -3.20978005,  3.00966866, -3.2731814 , -3.15968555,\n",
       "       -3.41654706,  3.04451819,  3.65828219,  4.15905207, -3.2988837 ,\n",
       "       -3.0394288 ,  3.23859278, -3.51023367,  4.08177676, -3.20467867,\n",
       "        3.54640525,  3.00516536, -3.03551026, -3.12372691, -3.59225073,\n",
       "        3.2187357 , -3.57198333, -3.23482848, -3.23793634, -4.04383444,\n",
       "        3.89013023, -3.02335499, -3.17016747,  3.00958558, -3.30860058,\n",
       "        3.00563432, -3.39907584,  3.05375858,  3.00976719, -3.59322102,\n",
       "        3.028177  ])"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cond = np.abs(b) > 3 * 1\n",
    "b[cond]\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据转换"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 轴和元素转换"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>8</td>\n",
       "      <td>4</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>6</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow  Keras\n",
       "A       7           2      6\n",
       "B       4           1      0\n",
       "C       5           1      2\n",
       "D       1           5      7\n",
       "E       9           8      8\n",
       "F       8           4      4\n",
       "G       8           0      2\n",
       "H       2           0      6\n",
       "I       6           4      2\n",
       "J       1           9      7"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(data=np.random.randint(0, 10, size=(10, 3)),\n",
    "                  columns=['Python', 'Tensorflow', 'Keras'],\n",
    "                  index=list('ABCDEFGHIJ'))\n",
    "df\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>人工智能</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>X</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Y</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>8</td>\n",
       "      <td>4</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>6</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   人工智能  Tensorflow  Keras\n",
       "X     7           2      6\n",
       "Y     4           1      0\n",
       "C     5           1      2\n",
       "D     1           5      7\n",
       "E     9           8      8\n",
       "F     8           4      4\n",
       "G     8           0      2\n",
       "H     2           0      6\n",
       "I     6           4      2\n",
       "J     1           9      7"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.rename(index={'A': 'X', 'B': 'Y'},  # 行替换\n",
    "          columns={'Python': '人工智能'})  # 列索引替换\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>50</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>1</td>\n",
       "      <td>50</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>8</td>\n",
       "      <td>4</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>6</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow  Keras\n",
       "A       7           2      6\n",
       "B       4           1      0\n",
       "C      50           1      2\n",
       "D       1          50      7\n",
       "E       9           8      8\n",
       "F       8           4      4\n",
       "G       8           0      2\n",
       "H       2           0      6\n",
       "I       6           4      2\n",
       "J       1           9      7"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.replace(5, 50)  # 替换值\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>1024</td>\n",
       "      <td>1024</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>8</td>\n",
       "      <td>4</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>1024</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>6</td>\n",
       "      <td>4</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "      <td>1024</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow  Keras\n",
       "A    1024        1024      6\n",
       "B       4           1      0\n",
       "C       5           1   1024\n",
       "D       1           5   1024\n",
       "E       9           8      8\n",
       "F       8           4      4\n",
       "G       8           0   1024\n",
       "H    1024           0      6\n",
       "I       6           4   1024\n",
       "J       1           9   1024"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.replace([2, 7], 1024)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.iloc[4, 2] = np.NaN\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>2048.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "      <td>-100.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>8</td>\n",
       "      <td>4</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>8</td>\n",
       "      <td>2048</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>2</td>\n",
       "      <td>2048</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>6</td>\n",
       "      <td>4</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow   Keras\n",
       "A       7           2     6.0\n",
       "B       4           1  2048.0\n",
       "C       5           1     2.0\n",
       "D       1           5     7.0\n",
       "E       9           8  -100.0\n",
       "F       8           4     4.0\n",
       "G       8        2048     2.0\n",
       "H       2        2048     6.0\n",
       "I       6           4     2.0\n",
       "J       1           9     7.0"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.replace({0: 2048, np.NaN: -100})\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>8</td>\n",
       "      <td>4</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>6</td>\n",
       "      <td>4</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow  Keras\n",
       "A       7           2    6.0\n",
       "B       4           1    0.0\n",
       "C       5           1    2.0\n",
       "D       1           5    7.0\n",
       "E       9           8    NaN\n",
       "F       8           4    4.0\n",
       "G       8           0    2.0\n",
       "H       2           0    6.0\n",
       "I       6           4    2.0\n",
       "J       1           9    7.0"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.replace({'Tensorflow': 1024}, -1024)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### map(只能操作Series)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A       NaN\n",
       "B       NaN\n",
       "C       NaN\n",
       "D       NaN\n",
       "E       NaN\n",
       "F       NaN\n",
       "G       NaN\n",
       "H       NaN\n",
       "I    1108.0\n",
       "J       NaN\n",
       "Name: Python, dtype: float64"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['Python'].map({1024: 3.14, 2048: 2.718, 6: 1108})\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A     True\n",
       "B    False\n",
       "C     True\n",
       "D     True\n",
       "E    False\n",
       "F     True\n",
       "G     True\n",
       "H     True\n",
       "I     True\n",
       "J     True\n",
       "Name: Keras, dtype: bool"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['Keras'].map(lambda x: True if x > 0 else False)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [],
   "source": [
    "def convert(x):\n",
    "    if x >= 1024:\n",
    "        return True\n",
    "    else:\n",
    "        return False\n",
    "\n",
    "\n",
    "df['level'] = df['Tensorflow'].map(convert)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "      <th>level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>7</td>\n",
       "      <td>2</td>\n",
       "      <td>6.0</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>2.0</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>7.0</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "      <td>NaN</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>8</td>\n",
       "      <td>4</td>\n",
       "      <td>4.0</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>6</td>\n",
       "      <td>4</td>\n",
       "      <td>2.0</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "      <td>7.0</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow  Keras  level\n",
       "A       7           2    6.0  False\n",
       "B       4           1    0.0  False\n",
       "C       5           1    2.0  False\n",
       "D       1           5    7.0  False\n",
       "E       9           8    NaN  False\n",
       "F       8           4    4.0  False\n",
       "G       8           0    2.0  False\n",
       "H       2           0    6.0  False\n",
       "I       6           4    2.0  False\n",
       "J       1           9    7.0  False"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### apply(Series DataFrame都可以操作)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A    107\n",
       "B    104\n",
       "C    105\n",
       "D    101\n",
       "E    109\n",
       "F    108\n",
       "G    108\n",
       "H    102\n",
       "I    106\n",
       "J    101\n",
       "Name: Python, dtype: int64"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['Python'].apply(lambda x: x + 100)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A    0\n",
       "B    0\n",
       "C    0\n",
       "D    0\n",
       "E    0\n",
       "F    0\n",
       "G    0\n",
       "H    0\n",
       "I    0\n",
       "J    0\n",
       "Name: level, dtype: int64"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['level'].apply(lambda x: 1 if x else 0)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "      <th>level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>1007</td>\n",
       "      <td>1002</td>\n",
       "      <td>1006.0</td>\n",
       "      <td>1000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>1004</td>\n",
       "      <td>1001</td>\n",
       "      <td>1000.0</td>\n",
       "      <td>1000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>1005</td>\n",
       "      <td>1001</td>\n",
       "      <td>1002.0</td>\n",
       "      <td>1000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>1001</td>\n",
       "      <td>1005</td>\n",
       "      <td>1007.0</td>\n",
       "      <td>1000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>1009</td>\n",
       "      <td>1008</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>1008</td>\n",
       "      <td>1004</td>\n",
       "      <td>1004.0</td>\n",
       "      <td>1000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>1008</td>\n",
       "      <td>1000</td>\n",
       "      <td>1002.0</td>\n",
       "      <td>1000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>1002</td>\n",
       "      <td>1000</td>\n",
       "      <td>1006.0</td>\n",
       "      <td>1000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>1006</td>\n",
       "      <td>1004</td>\n",
       "      <td>1002.0</td>\n",
       "      <td>1000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>1001</td>\n",
       "      <td>1009</td>\n",
       "      <td>1007.0</td>\n",
       "      <td>1000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow   Keras  level\n",
       "A    1007        1002  1006.0   1000\n",
       "B    1004        1001  1000.0   1000\n",
       "C    1005        1001  1002.0   1000\n",
       "D    1001        1005  1007.0   1000\n",
       "E    1009        1008     NaN   1000\n",
       "F    1008        1004  1004.0   1000\n",
       "G    1008        1000  1002.0   1000\n",
       "H    1002        1000  1006.0   1000\n",
       "I    1006        1004  1002.0   1000\n",
       "J    1001        1009  1007.0   1000"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.apply(lambda x: x + 1000)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "      <th>level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>5.5</td>\n",
       "      <td>3.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>10.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>9.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3.0</td>\n",
       "      <td>3.2</td>\n",
       "      <td>2.6</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow  Keras  level\n",
       "0     5.5         3.0    4.0    0.0\n",
       "1    10.0        10.0    9.0     10\n",
       "2     1.0         0.0    0.0  False\n",
       "3     9.0         9.0    7.0  False\n",
       "4     3.0         3.2    2.6    0.0"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def convert(x):\n",
    "    return (x.median(), x.count(), x.min(), x.max(), x.std())\n",
    "\n",
    "\n",
    "df.apply(convert).round(1)  # 默认操作的列数据，axis=1就是行数据\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### transform"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.DataFrame(data=np.random.randint(0, 10, size=(10, 3)),\n",
    "                  columns=['Python', 'Tensorflow', 'Keras'],\n",
    "                  index=list('ABCDEFGHIJ'))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A    1024\n",
       "B    1024\n",
       "C   -1024\n",
       "D   -1024\n",
       "E    1024\n",
       "F   -1024\n",
       "G   -1024\n",
       "H    1024\n",
       "I   -1024\n",
       "J    1024\n",
       "Name: Python, dtype: int64"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['Python'].transform(lambda x: 1024 if x > 5 else -1024)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sqrt</th>\n",
       "      <th>square</th>\n",
       "      <th>cumsum</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>2.236068</td>\n",
       "      <td>25</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>2.645751</td>\n",
       "      <td>49</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>81</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>2.236068</td>\n",
       "      <td>25</td>\n",
       "      <td>26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>2.449490</td>\n",
       "      <td>36</td>\n",
       "      <td>32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>2.236068</td>\n",
       "      <td>25</td>\n",
       "      <td>37</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>2.236068</td>\n",
       "      <td>25</td>\n",
       "      <td>42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1</td>\n",
       "      <td>43</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1</td>\n",
       "      <td>44</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       sqrt  square  cumsum\n",
       "A  0.000000       0       0\n",
       "B  2.236068      25       5\n",
       "C  2.645751      49      12\n",
       "D  3.000000      81      21\n",
       "E  2.236068      25      26\n",
       "F  2.449490      36      32\n",
       "G  2.236068      25      37\n",
       "H  2.236068      25      42\n",
       "I  1.000000       1      43\n",
       "J  1.000000       1      44"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['Tensorflow'].transform([np.sqrt, np.square, np.cumsum])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>14</td>\n",
       "      <td>25</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>16</td>\n",
       "      <td>49</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>19</td>\n",
       "      <td>81</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>25</td>\n",
       "      <td>25</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>29</td>\n",
       "      <td>36</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>33</td>\n",
       "      <td>25</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>40</td>\n",
       "      <td>25</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>41</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>47</td>\n",
       "      <td>1</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow  Keras\n",
       "A       8           0   True\n",
       "B      14          25   True\n",
       "C      16          49  False\n",
       "D      19          81   True\n",
       "E      25          25   True\n",
       "F      29          36   True\n",
       "G      33          25   True\n",
       "H      40          25  False\n",
       "I      41           1   True\n",
       "J      47           1  False"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def convert(x):\n",
    "    if x > 5:\n",
    "        return True\n",
    "    else:\n",
    "        return False\n",
    "\n",
    "\n",
    "df.transform({'Python': np.cumsum, 'Tensorflow': np.square, 'Keras': convert})\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 重排和随机抽样"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>2</td>\n",
       "      <td>7</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>3</td>\n",
       "      <td>9</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>6</td>\n",
       "      <td>5</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>6</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>4</td>\n",
       "      <td>6</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>7</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow  Keras\n",
       "C       2           7      3\n",
       "D       3           9      7\n",
       "I       1           1      8\n",
       "E       6           5      8\n",
       "B       6           5      6\n",
       "F       4           6      9\n",
       "A       8           0      7\n",
       "G       4           5      6\n",
       "J       6           1      0\n",
       "H       7           5      0"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.take(np.random.permutation(10))  # 重排\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>4</td>\n",
       "      <td>6</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>7</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>2</td>\n",
       "      <td>7</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>6</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>7</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>6</td>\n",
       "      <td>5</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow  Keras\n",
       "F       4           6      9\n",
       "H       7           5      0\n",
       "J       6           1      0\n",
       "C       2           7      3\n",
       "G       4           5      6\n",
       "B       6           5      6\n",
       "H       7           5      0\n",
       "E       6           5      8\n",
       "A       8           0      7\n",
       "J       6           1      0"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.take(np.random.randint(0, 10, size=10))  # 随机抽取\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>c</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>c</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  key\n",
       "0   a\n",
       "1   b\n",
       "2   a\n",
       "3   b\n",
       "4   c\n",
       "5   b\n",
       "6   c"
      ]
     },
     "execution_count": 93,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = pd.DataFrame({'key': ['a', 'b', 'a', 'b', 'c', 'b', 'c'], })\n",
    "df2\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>a</th>\n",
       "      <th>b</th>\n",
       "      <th>c</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   a  b  c\n",
       "0  1  0  0\n",
       "1  0  1  0\n",
       "2  1  0  0\n",
       "3  0  1  0\n",
       "4  0  0  1\n",
       "5  0  1  0\n",
       "6  0  0  1"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.get_dummies(df2, prefix='', prefix_sep='')  # one hot编码（哑变量） 1表示有，0表示没有\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据重塑"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>6</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>2</td>\n",
       "      <td>7</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>3</td>\n",
       "      <td>9</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>6</td>\n",
       "      <td>5</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>4</td>\n",
       "      <td>6</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>7</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow  Keras\n",
       "A       8           0      7\n",
       "B       6           5      6\n",
       "C       2           7      3\n",
       "D       3           9      7\n",
       "E       6           5      8\n",
       "F       4           6      9\n",
       "G       4           5      6\n",
       "H       7           5      0\n",
       "I       1           1      8\n",
       "J       6           1      0"
      ]
     },
     "execution_count": 95,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "      <th>F</th>\n",
       "      <th>G</th>\n",
       "      <th>H</th>\n",
       "      <th>I</th>\n",
       "      <th>J</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Python</th>\n",
       "      <td>8</td>\n",
       "      <td>6</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>6</td>\n",
       "      <td>4</td>\n",
       "      <td>4</td>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Tensorflow</th>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>7</td>\n",
       "      <td>9</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>5</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Keras</th>\n",
       "      <td>7</td>\n",
       "      <td>6</td>\n",
       "      <td>3</td>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "      <td>9</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            A  B  C  D  E  F  G  H  I  J\n",
       "Python      8  6  2  3  6  4  4  7  1  6\n",
       "Tensorflow  0  5  7  9  5  6  5  5  1  1\n",
       "Keras       7  6  3  7  8  9  6  0  8  0"
      ]
     },
     "execution_count": 96,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.T  # 转置\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">A</th>\n",
       "      <th>期中</th>\n",
       "      <td>8</td>\n",
       "      <td>8</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">B</th>\n",
       "      <th>期中</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>8</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">C</th>\n",
       "      <th>期中</th>\n",
       "      <td>3</td>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">D</th>\n",
       "      <th>期中</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">E</th>\n",
       "      <th>期中</th>\n",
       "      <td>4</td>\n",
       "      <td>8</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">F</th>\n",
       "      <th>期中</th>\n",
       "      <td>6</td>\n",
       "      <td>4</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>7</td>\n",
       "      <td>6</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">G</th>\n",
       "      <th>期中</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>8</td>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">H</th>\n",
       "      <th>期中</th>\n",
       "      <td>9</td>\n",
       "      <td>4</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>3</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">I</th>\n",
       "      <th>期中</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>9</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">J</th>\n",
       "      <th>期中</th>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Python  Math  En\n",
       "A 期中       8     8   9\n",
       "  期末       3     0   5\n",
       "B 期中       2     0   2\n",
       "  期末       8     3   1\n",
       "C 期中       3     9   0\n",
       "  期末       2     0   1\n",
       "D 期中       5     1   3\n",
       "  期末       4     1   6\n",
       "E 期中       4     8   9\n",
       "  期末       1     4   7\n",
       "F 期中       6     4   9\n",
       "  期末       7     6   9\n",
       "G 期中       5     0   5\n",
       "  期末       8     7   8\n",
       "H 期中       9     4   6\n",
       "  期末       3     5   3\n",
       "I 期中       2     3   5\n",
       "  期末       9     3   1\n",
       "J 期中       6     8   9\n",
       "  期末       0     4   9"
      ]
     },
     "execution_count": 97,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = pd.DataFrame(np.random.randint(0, 10, size=(20, 3)),\n",
    "                   columns=['Python', 'Math', 'En'],\n",
    "                   index=pd.MultiIndex.from_product([list('ABCDEFGHIJ'), ['期中', '期末']]))\n",
    "df2\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"2\" halign=\"left\">Python</th>\n",
       "      <th colspan=\"2\" halign=\"left\">Math</th>\n",
       "      <th colspan=\"2\" halign=\"left\">En</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>期中</th>\n",
       "      <th>期末</th>\n",
       "      <th>期中</th>\n",
       "      <th>期末</th>\n",
       "      <th>期中</th>\n",
       "      <th>期末</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>8</td>\n",
       "      <td>3</td>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>2</td>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>8</td>\n",
       "      <td>4</td>\n",
       "      <td>9</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>6</td>\n",
       "      <td>7</td>\n",
       "      <td>4</td>\n",
       "      <td>6</td>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>5</td>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "      <td>5</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>9</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "      <td>4</td>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Python    Math    En   \n",
       "      期中 期末   期中 期末 期中 期末\n",
       "A      8  3    8  0  9  5\n",
       "B      2  8    0  3  2  1\n",
       "C      3  2    9  0  0  1\n",
       "D      5  4    1  1  3  6\n",
       "E      4  1    8  4  9  7\n",
       "F      6  7    4  6  9  9\n",
       "G      5  8    0  7  5  8\n",
       "H      9  3    4  5  6  3\n",
       "I      2  9    3  3  5  1\n",
       "J      6  0    8  4  9  9"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2.unstack(level=1)  # 将行索引转换为列索引\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"10\" halign=\"left\">Python</th>\n",
       "      <th>...</th>\n",
       "      <th colspan=\"10\" halign=\"left\">En</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "      <th>F</th>\n",
       "      <th>G</th>\n",
       "      <th>H</th>\n",
       "      <th>I</th>\n",
       "      <th>J</th>\n",
       "      <th>...</th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "      <th>F</th>\n",
       "      <th>G</th>\n",
       "      <th>H</th>\n",
       "      <th>I</th>\n",
       "      <th>J</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>期中</th>\n",
       "      <td>8</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "      <td>6</td>\n",
       "      <td>5</td>\n",
       "      <td>9</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>...</td>\n",
       "      <td>9</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>5</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>3</td>\n",
       "      <td>8</td>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "      <td>3</td>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>7</td>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2 rows × 30 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python                             ... En                           \n",
       "        A  B  C  D  E  F  G  H  I  J  ...  A  B  C  D  E  F  G  H  I  J\n",
       "期中      8  2  3  5  4  6  5  9  2  6  ...  9  2  0  3  9  9  5  6  5  9\n",
       "期末      3  8  2  4  1  7  8  3  9  0  ...  5  1  1  6  7  9  8  3  1  9\n",
       "\n",
       "[2 rows x 30 columns]"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2.unstack(level=0)  # 将行索引转换为列索引\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A  期中  Python    8\n",
       "       Math      8\n",
       "       En        9\n",
       "   期末  Python    3\n",
       "       Math      0\n",
       "       En        5\n",
       "B  期中  Python    2\n",
       "       Math      0\n",
       "       En        2\n",
       "   期末  Python    8\n",
       "       Math      3\n",
       "       En        1\n",
       "C  期中  Python    3\n",
       "       Math      9\n",
       "       En        0\n",
       "   期末  Python    2\n",
       "       Math      0\n",
       "       En        1\n",
       "D  期中  Python    5\n",
       "       Math      1\n",
       "       En        3\n",
       "   期末  Python    4\n",
       "       Math      1\n",
       "       En        6\n",
       "E  期中  Python    4\n",
       "       Math      8\n",
       "       En        9\n",
       "   期末  Python    1\n",
       "       Math      4\n",
       "       En        7\n",
       "F  期中  Python    6\n",
       "       Math      4\n",
       "       En        9\n",
       "   期末  Python    7\n",
       "       Math      6\n",
       "       En        9\n",
       "G  期中  Python    5\n",
       "       Math      0\n",
       "       En        5\n",
       "   期末  Python    8\n",
       "       Math      7\n",
       "       En        8\n",
       "H  期中  Python    9\n",
       "       Math      4\n",
       "       En        6\n",
       "   期末  Python    3\n",
       "       Math      5\n",
       "       En        3\n",
       "I  期中  Python    2\n",
       "       Math      3\n",
       "       En        5\n",
       "   期末  Python    9\n",
       "       Math      3\n",
       "       En        1\n",
       "J  期中  Python    6\n",
       "       Math      8\n",
       "       En        9\n",
       "   期末  Python    0\n",
       "       Math      4\n",
       "       En        9\n",
       "dtype: int64"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2.stack()  # 列变成行\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python    4.75\n",
       "Math      3.90\n",
       "En        5.35\n",
       "dtype: float64"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2.mean()  # 默认计算的是列\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A  期中    8.333333\n",
       "   期末    2.666667\n",
       "B  期中    1.333333\n",
       "   期末    4.000000\n",
       "C  期中    4.000000\n",
       "   期末    1.000000\n",
       "D  期中    3.000000\n",
       "   期末    3.666667\n",
       "E  期中    7.000000\n",
       "   期末    4.000000\n",
       "F  期中    6.333333\n",
       "   期末    7.333333\n",
       "G  期中    3.333333\n",
       "   期末    7.666667\n",
       "H  期中    6.333333\n",
       "   期末    3.666667\n",
       "I  期中    3.333333\n",
       "   期末    4.333333\n",
       "J  期中    7.666667\n",
       "   期末    4.333333\n",
       "dtype: float64"
      ]
     },
     "execution_count": 102,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2.mean(axis=1)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/g_/dxml3hms52dfwqrcbt4fdmtw0000gn/T/ipykernel_43387/611286966.py:1: FutureWarning: Using the level keyword in DataFrame and Series aggregations is deprecated and will be removed in a future version. Use groupby instead. df.median(level=1) should use df.groupby(level=1).median().\n",
      "  df2.mean(level=0)  # 计算每个同学期中和期末的平均分\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>5.5</td>\n",
       "      <td>4.0</td>\n",
       "      <td>7.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>5.0</td>\n",
       "      <td>1.5</td>\n",
       "      <td>1.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>2.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>0.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>4.5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>4.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>2.5</td>\n",
       "      <td>6.0</td>\n",
       "      <td>8.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>6.5</td>\n",
       "      <td>5.0</td>\n",
       "      <td>9.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>6.5</td>\n",
       "      <td>3.5</td>\n",
       "      <td>6.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>6.0</td>\n",
       "      <td>4.5</td>\n",
       "      <td>4.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>5.5</td>\n",
       "      <td>3.0</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>3.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>9.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Math   En\n",
       "A     5.5   4.0  7.0\n",
       "B     5.0   1.5  1.5\n",
       "C     2.5   4.5  0.5\n",
       "D     4.5   1.0  4.5\n",
       "E     2.5   6.0  8.0\n",
       "F     6.5   5.0  9.0\n",
       "G     6.5   3.5  6.5\n",
       "H     6.0   4.5  4.5\n",
       "I     5.5   3.0  3.0\n",
       "J     3.0   6.0  9.0"
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2.mean(level=0)  # 计算每个同学期中和期末的平均分\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/g_/dxml3hms52dfwqrcbt4fdmtw0000gn/T/ipykernel_43387/2213370145.py:1: FutureWarning: Using the level keyword in DataFrame and Series aggregations is deprecated and will be removed in a future version. Use groupby instead. df.median(level=1) should use df.groupby(level=1).median().\n",
      "  df2.mean(level=1)  # 计算期中和期末所有学生的平均分\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>期中</th>\n",
       "      <td>5.0</td>\n",
       "      <td>4.5</td>\n",
       "      <td>5.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>期末</th>\n",
       "      <td>4.5</td>\n",
       "      <td>3.3</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Python  Math   En\n",
       "期中     5.0   4.5  5.7\n",
       "期末     4.5   3.3  5.0"
      ]
     },
     "execution_count": 104,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2.mean(level=1)  # 计算期中和期末所有学生的平均分\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据统计"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 基本统计指标"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>5</td>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>9</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>5</td>\n",
       "      <td>9</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>9</td>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>3</td>\n",
       "      <td>7</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>0</td>\n",
       "      <td>7</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>7</td>\n",
       "      <td>3</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>3</td>\n",
       "      <td>7</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Python  Math  En\n",
       "0        7     8   1\n",
       "1        5     5   2\n",
       "2        5     6   6\n",
       "3        9     2   3\n",
       "4        5     6   8\n",
       "5        5     9   7\n",
       "6        7     1   4\n",
       "7        9     7   8\n",
       "8        5     4   6\n",
       "9        8     1   7\n",
       "10       7     8   4\n",
       "11       1     9   2\n",
       "12       3     7   6\n",
       "13       7     0   6\n",
       "14       0     7   9\n",
       "15       7     3   7\n",
       "16       0     9   9\n",
       "17       6     0   8\n",
       "18       3     1   8\n",
       "19       3     7   6"
      ]
     },
     "execution_count": 105,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(data=np.random.randint(0, 10, size=(20, 3)),\n",
    "                  columns=['Python', 'Math', 'En'])\n",
    "df\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python    20\n",
       "Math      20\n",
       "En        20\n",
       "dtype: int64"
      ]
     },
     "execution_count": 106,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.count()  # 统计非空数据数量\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python    5.10\n",
       "Math      5.00\n",
       "En        5.85\n",
       "dtype: float64"
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.mean()  # 平均值\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python    5.0\n",
       "Math      6.0\n",
       "En        6.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.median()  # 中位数\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python    0\n",
       "Math      0\n",
       "En        1\n",
       "dtype: int64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "Python    9\n",
       "Math      9\n",
       "En        9\n",
       "dtype: int64"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display(df.min(), df.max())  # 最小值最大值\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([7, 5, 9, 8, 1, 3, 0, 6])"
      ]
     },
     "execution_count": 110,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['Python'].unique()  # 去重\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "7    4\n",
       "9    3\n",
       "1    3\n",
       "8    2\n",
       "6    2\n",
       "0    2\n",
       "5    1\n",
       "2    1\n",
       "4    1\n",
       "3    1\n",
       "Name: Math, dtype: int64"
      ]
     },
     "execution_count": 111,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['Math'].value_counts()  # 统计出现的频次\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0.00</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.25</th>\n",
       "      <td>3.0</td>\n",
       "      <td>1.75</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.50</th>\n",
       "      <td>5.0</td>\n",
       "      <td>6.00</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.75</th>\n",
       "      <td>7.0</td>\n",
       "      <td>7.25</td>\n",
       "      <td>8.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1.00</th>\n",
       "      <td>9.0</td>\n",
       "      <td>9.00</td>\n",
       "      <td>9.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Python  Math   En\n",
       "0.00     0.0  0.00  1.0\n",
       "0.25     3.0  1.75  4.0\n",
       "0.50     5.0  6.00  6.0\n",
       "0.75     7.0  7.25  8.0\n",
       "1.00     9.0  9.00  9.0"
      ]
     },
     "execution_count": 112,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.quantile(q=[0, 0.25, 0.5, 0.75, 1])  # 百分位数\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>20.000000</td>\n",
       "      <td>20.00000</td>\n",
       "      <td>20.00000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>5.100000</td>\n",
       "      <td>5.00000</td>\n",
       "      <td>5.85000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>2.712544</td>\n",
       "      <td>3.21182</td>\n",
       "      <td>2.41214</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>1.00000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>1.75000</td>\n",
       "      <td>4.00000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>5.000000</td>\n",
       "      <td>6.00000</td>\n",
       "      <td>6.00000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>7.000000</td>\n",
       "      <td>7.25000</td>\n",
       "      <td>8.00000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>9.000000</td>\n",
       "      <td>9.00000</td>\n",
       "      <td>9.00000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          Python      Math        En\n",
       "count  20.000000  20.00000  20.00000\n",
       "mean    5.100000   5.00000   5.85000\n",
       "std     2.712544   3.21182   2.41214\n",
       "min     0.000000   0.00000   1.00000\n",
       "25%     3.000000   1.75000   4.00000\n",
       "50%     5.000000   6.00000   6.00000\n",
       "75%     7.000000   7.25000   8.00000\n",
       "max     9.000000   9.00000   9.00000"
      ]
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 索引标签 位置获取"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3"
      ]
     },
     "execution_count": 114,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['Python'].argmax()  # 最大值的索引\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 115,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['En'].argmin()  # 最小值的索引\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python     3\n",
       "Math       5\n",
       "En        14\n",
       "dtype: int64"
      ]
     },
     "execution_count": 116,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.idxmax()  # 返回每一列最大值的索引\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python    14\n",
       "Math      13\n",
       "En         0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 117,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.idxmin()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 更多指标"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>12</td>\n",
       "      <td>13</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>17</td>\n",
       "      <td>19</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>26</td>\n",
       "      <td>21</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>31</td>\n",
       "      <td>27</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>36</td>\n",
       "      <td>36</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>43</td>\n",
       "      <td>37</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>52</td>\n",
       "      <td>44</td>\n",
       "      <td>39</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>57</td>\n",
       "      <td>48</td>\n",
       "      <td>45</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>65</td>\n",
       "      <td>49</td>\n",
       "      <td>52</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>72</td>\n",
       "      <td>57</td>\n",
       "      <td>56</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>73</td>\n",
       "      <td>66</td>\n",
       "      <td>58</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>76</td>\n",
       "      <td>73</td>\n",
       "      <td>64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>83</td>\n",
       "      <td>73</td>\n",
       "      <td>70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>83</td>\n",
       "      <td>80</td>\n",
       "      <td>79</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>90</td>\n",
       "      <td>83</td>\n",
       "      <td>86</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>90</td>\n",
       "      <td>92</td>\n",
       "      <td>95</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>96</td>\n",
       "      <td>92</td>\n",
       "      <td>103</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>99</td>\n",
       "      <td>93</td>\n",
       "      <td>111</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>102</td>\n",
       "      <td>100</td>\n",
       "      <td>117</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Python  Math   En\n",
       "0        7     8    1\n",
       "1       12    13    3\n",
       "2       17    19    9\n",
       "3       26    21   12\n",
       "4       31    27   20\n",
       "5       36    36   27\n",
       "6       43    37   31\n",
       "7       52    44   39\n",
       "8       57    48   45\n",
       "9       65    49   52\n",
       "10      72    57   56\n",
       "11      73    66   58\n",
       "12      76    73   64\n",
       "13      83    73   70\n",
       "14      83    80   79\n",
       "15      90    83   86\n",
       "16      90    92   95\n",
       "17      96    92  103\n",
       "18      99    93  111\n",
       "19     102   100  117"
      ]
     },
     "execution_count": 118,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.cumsum()  # 累加\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>35</td>\n",
       "      <td>40</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>175</td>\n",
       "      <td>240</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1575</td>\n",
       "      <td>480</td>\n",
       "      <td>36</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>7875</td>\n",
       "      <td>2880</td>\n",
       "      <td>288</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>39375</td>\n",
       "      <td>25920</td>\n",
       "      <td>2016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>275625</td>\n",
       "      <td>25920</td>\n",
       "      <td>8064</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2480625</td>\n",
       "      <td>181440</td>\n",
       "      <td>64512</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>12403125</td>\n",
       "      <td>725760</td>\n",
       "      <td>387072</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>99225000</td>\n",
       "      <td>725760</td>\n",
       "      <td>2709504</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>694575000</td>\n",
       "      <td>5806080</td>\n",
       "      <td>10838016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>694575000</td>\n",
       "      <td>52254720</td>\n",
       "      <td>21676032</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>2083725000</td>\n",
       "      <td>365783040</td>\n",
       "      <td>130056192</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>14586075000</td>\n",
       "      <td>0</td>\n",
       "      <td>780337152</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>7023034368</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>49161240576</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>442451165184</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3539609321472</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>28316874571776</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>169901247430656</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         Python       Math               En\n",
       "0             7          8                1\n",
       "1            35         40                2\n",
       "2           175        240               12\n",
       "3          1575        480               36\n",
       "4          7875       2880              288\n",
       "5         39375      25920             2016\n",
       "6        275625      25920             8064\n",
       "7       2480625     181440            64512\n",
       "8      12403125     725760           387072\n",
       "9      99225000     725760          2709504\n",
       "10    694575000    5806080         10838016\n",
       "11    694575000   52254720         21676032\n",
       "12   2083725000  365783040        130056192\n",
       "13  14586075000          0        780337152\n",
       "14            0          0       7023034368\n",
       "15            0          0      49161240576\n",
       "16            0          0     442451165184\n",
       "17            0          0    3539609321472\n",
       "18            0          0   28316874571776\n",
       "19            0          0  169901247430656"
      ]
     },
     "execution_count": 119,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.cumprod()  # 累乘\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>5</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>5</td>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>5</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Python  Math  En\n",
       "0        7     8   1\n",
       "1        5     5   1\n",
       "2        5     5   1\n",
       "3        5     2   1\n",
       "4        5     2   1\n",
       "5        5     2   1\n",
       "6        5     1   1\n",
       "7        5     1   1\n",
       "8        5     1   1\n",
       "9        5     1   1\n",
       "10       5     1   1\n",
       "11       1     1   1\n",
       "12       1     1   1\n",
       "13       1     0   1\n",
       "14       0     0   1\n",
       "15       0     0   1\n",
       "16       0     0   1\n",
       "17       0     0   1\n",
       "18       0     0   1\n",
       "19       0     0   1"
      ]
     },
     "execution_count": 120,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.cummin()  # 累计最小值\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Python  Math  En\n",
       "0        7     8   1\n",
       "1        7     8   2\n",
       "2        7     8   6\n",
       "3        9     8   6\n",
       "4        9     8   8\n",
       "5        9     9   8\n",
       "6        9     9   8\n",
       "7        9     9   8\n",
       "8        9     9   8\n",
       "9        9     9   8\n",
       "10       9     9   8\n",
       "11       9     9   8\n",
       "12       9     9   8\n",
       "13       9     9   8\n",
       "14       9     9   9\n",
       "15       9     9   9\n",
       "16       9     9   9\n",
       "17       9     9   9\n",
       "18       9     9   9\n",
       "19       9     9   9"
      ]
     },
     "execution_count": 121,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.cummax()  # 累计最大值\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python    2.712544\n",
       "Math      3.211820\n",
       "En        2.412140\n",
       "dtype: float64"
      ]
     },
     "execution_count": 122,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.std()  # 标准差\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python     7.357895\n",
       "Math      10.315789\n",
       "En         5.818421\n",
       "dtype: float64"
      ]
     },
     "execution_count": 123,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.var()  # 方差\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-2.0</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4.0</td>\n",
       "      <td>-4.0</td>\n",
       "      <td>-3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-4.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2.0</td>\n",
       "      <td>-8.0</td>\n",
       "      <td>-3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>-4.0</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>-2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>3.0</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>-1.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>-3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>-6.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>-2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>2.0</td>\n",
       "      <td>-2.0</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>4.0</td>\n",
       "      <td>-7.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>-7.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>7.0</td>\n",
       "      <td>-4.0</td>\n",
       "      <td>-2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>-7.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>6.0</td>\n",
       "      <td>-9.0</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>-3.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>-2.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Python  Math   En\n",
       "0      NaN   NaN  NaN\n",
       "1     -2.0  -3.0  1.0\n",
       "2      0.0   1.0  4.0\n",
       "3      4.0  -4.0 -3.0\n",
       "4     -4.0   4.0  5.0\n",
       "5      0.0   3.0 -1.0\n",
       "6      2.0  -8.0 -3.0\n",
       "7      2.0   6.0  4.0\n",
       "8     -4.0  -3.0 -2.0\n",
       "9      3.0  -3.0  1.0\n",
       "10    -1.0   7.0 -3.0\n",
       "11    -6.0   1.0 -2.0\n",
       "12     2.0  -2.0  4.0\n",
       "13     4.0  -7.0  0.0\n",
       "14    -7.0   7.0  3.0\n",
       "15     7.0  -4.0 -2.0\n",
       "16    -7.0   6.0  2.0\n",
       "17     6.0  -9.0 -1.0\n",
       "18    -3.0   1.0  0.0\n",
       "19     0.0   6.0 -2.0"
      ]
     },
     "execution_count": 124,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.diff()  # 差分 当前数据减去前一个的差值\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 125,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.286</td>\n",
       "      <td>-0.375</td>\n",
       "      <td>1.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.000</td>\n",
       "      <td>0.200</td>\n",
       "      <td>2.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.800</td>\n",
       "      <td>-0.667</td>\n",
       "      <td>-0.500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.444</td>\n",
       "      <td>2.000</td>\n",
       "      <td>1.667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.000</td>\n",
       "      <td>0.500</td>\n",
       "      <td>-0.125</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.400</td>\n",
       "      <td>-0.889</td>\n",
       "      <td>-0.429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.286</td>\n",
       "      <td>6.000</td>\n",
       "      <td>1.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>-0.444</td>\n",
       "      <td>-0.429</td>\n",
       "      <td>-0.250</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.600</td>\n",
       "      <td>-0.750</td>\n",
       "      <td>0.167</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>-0.125</td>\n",
       "      <td>7.000</td>\n",
       "      <td>-0.429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>-0.857</td>\n",
       "      <td>0.125</td>\n",
       "      <td>-0.500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>2.000</td>\n",
       "      <td>-0.222</td>\n",
       "      <td>2.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>1.333</td>\n",
       "      <td>-1.000</td>\n",
       "      <td>0.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>-1.000</td>\n",
       "      <td>inf</td>\n",
       "      <td>0.500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>inf</td>\n",
       "      <td>-0.571</td>\n",
       "      <td>-0.222</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>-1.000</td>\n",
       "      <td>2.000</td>\n",
       "      <td>0.286</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>inf</td>\n",
       "      <td>-1.000</td>\n",
       "      <td>-0.111</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>-0.500</td>\n",
       "      <td>inf</td>\n",
       "      <td>0.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>0.000</td>\n",
       "      <td>6.000</td>\n",
       "      <td>-0.250</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Python   Math     En\n",
       "0      NaN    NaN    NaN\n",
       "1   -0.286 -0.375  1.000\n",
       "2    0.000  0.200  2.000\n",
       "3    0.800 -0.667 -0.500\n",
       "4   -0.444  2.000  1.667\n",
       "5    0.000  0.500 -0.125\n",
       "6    0.400 -0.889 -0.429\n",
       "7    0.286  6.000  1.000\n",
       "8   -0.444 -0.429 -0.250\n",
       "9    0.600 -0.750  0.167\n",
       "10  -0.125  7.000 -0.429\n",
       "11  -0.857  0.125 -0.500\n",
       "12   2.000 -0.222  2.000\n",
       "13   1.333 -1.000  0.000\n",
       "14  -1.000    inf  0.500\n",
       "15     inf -0.571 -0.222\n",
       "16  -1.000  2.000  0.286\n",
       "17     inf -1.000 -0.111\n",
       "18  -0.500    inf  0.000\n",
       "19   0.000  6.000 -0.250"
      ]
     },
     "execution_count": 125,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.pct_change().round(3)  # 百分比变化\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 高级统计指标"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 126,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Python</th>\n",
       "      <td>7.357895</td>\n",
       "      <td>-4.052632</td>\n",
       "      <td>-1.721053</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Math</th>\n",
       "      <td>-4.052632</td>\n",
       "      <td>10.315789</td>\n",
       "      <td>-0.842105</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>En</th>\n",
       "      <td>-1.721053</td>\n",
       "      <td>-0.842105</td>\n",
       "      <td>5.818421</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          Python       Math        En\n",
       "Python  7.357895  -4.052632 -1.721053\n",
       "Math   -4.052632  10.315789 -0.842105\n",
       "En     -1.721053  -0.842105  5.818421"
      ]
     },
     "execution_count": 126,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.cov()  # 协方差\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 127,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Python</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.465167</td>\n",
       "      <td>-0.263036</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Math</th>\n",
       "      <td>-0.465167</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.108696</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>En</th>\n",
       "      <td>-0.263036</td>\n",
       "      <td>-0.108696</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          Python      Math        En\n",
       "Python  1.000000 -0.465167 -0.263036\n",
       "Math   -0.465167  1.000000 -0.108696\n",
       "En     -0.263036 -0.108696  1.000000"
      ]
     },
     "execution_count": 127,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.corr()  # 相关系数\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 128,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Python   -0.263036\n",
       "Math     -0.108696\n",
       "En        1.000000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 128,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.corrwith(df['En'])\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 排序"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>15</td>\n",
       "      <td>14</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>W</th>\n",
       "      <td>1</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R</th>\n",
       "      <td>9</td>\n",
       "      <td>5</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>T</th>\n",
       "      <td>18</td>\n",
       "      <td>6</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Y</th>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>U</th>\n",
       "      <td>19</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>15</td>\n",
       "      <td>8</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>P</th>\n",
       "      <td>7</td>\n",
       "      <td>13</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>S</th>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>13</td>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>15</td>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>6</td>\n",
       "      <td>13</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K</th>\n",
       "      <td>12</td>\n",
       "      <td>7</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>L</th>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Z</th>\n",
       "      <td>18</td>\n",
       "      <td>8</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow  Keras\n",
       "Q      15          14      4\n",
       "W       1          13      0\n",
       "E       1           6      8\n",
       "R       9           5     18\n",
       "T      18           6     10\n",
       "Y       0           4      5\n",
       "U      19           2      6\n",
       "I       0           5      4\n",
       "O      15           8     14\n",
       "P       7          13      8\n",
       "A       2           9     19\n",
       "S       2           9      3\n",
       "D      13           8      0\n",
       "F       0           5     15\n",
       "G       1           5      3\n",
       "H      15           1      9\n",
       "J       6          13     12\n",
       "K      12           7     18\n",
       "L       5           4     16\n",
       "Z      18           8     14"
      ]
     },
     "execution_count": 130,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(data=np.random.randint(0, 20, size=(20, 3)),\n",
    "                  columns=['Python', 'Tensorflow', 'Keras'],\n",
    "                  index=list('QWERTYUIOPASDFGHJKLZ'))\n",
    "df\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Z</th>\n",
       "      <td>18</td>\n",
       "      <td>8</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Y</th>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>W</th>\n",
       "      <td>1</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>U</th>\n",
       "      <td>19</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>T</th>\n",
       "      <td>18</td>\n",
       "      <td>6</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>S</th>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R</th>\n",
       "      <td>9</td>\n",
       "      <td>5</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>15</td>\n",
       "      <td>14</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>P</th>\n",
       "      <td>7</td>\n",
       "      <td>13</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>15</td>\n",
       "      <td>8</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>L</th>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K</th>\n",
       "      <td>12</td>\n",
       "      <td>7</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>6</td>\n",
       "      <td>13</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>15</td>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>13</td>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow  Keras\n",
       "Z      18           8     14\n",
       "Y       0           4      5\n",
       "W       1          13      0\n",
       "U      19           2      6\n",
       "T      18           6     10\n",
       "S       2           9      3\n",
       "R       9           5     18\n",
       "Q      15          14      4\n",
       "P       7          13      8\n",
       "O      15           8     14\n",
       "L       5           4     16\n",
       "K      12           7     18\n",
       "J       6          13     12\n",
       "I       0           5      4\n",
       "H      15           1      9\n",
       "G       1           5      3\n",
       "F       0           5     15\n",
       "E       1           6      8\n",
       "D      13           8      0\n",
       "A       2           9     19"
      ]
     },
     "execution_count": 132,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sort_index(axis=0, ascending=False)  # 根据index降序排序\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Y</th>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>W</th>\n",
       "      <td>1</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>S</th>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>L</th>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>6</td>\n",
       "      <td>13</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>P</th>\n",
       "      <td>7</td>\n",
       "      <td>13</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R</th>\n",
       "      <td>9</td>\n",
       "      <td>5</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K</th>\n",
       "      <td>12</td>\n",
       "      <td>7</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>13</td>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>15</td>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>15</td>\n",
       "      <td>14</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>15</td>\n",
       "      <td>8</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>T</th>\n",
       "      <td>18</td>\n",
       "      <td>6</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Z</th>\n",
       "      <td>18</td>\n",
       "      <td>8</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>U</th>\n",
       "      <td>19</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow  Keras\n",
       "Y       0           4      5\n",
       "I       0           5      4\n",
       "F       0           5     15\n",
       "W       1          13      0\n",
       "E       1           6      8\n",
       "G       1           5      3\n",
       "A       2           9     19\n",
       "S       2           9      3\n",
       "L       5           4     16\n",
       "J       6          13     12\n",
       "P       7          13      8\n",
       "R       9           5     18\n",
       "K      12           7     18\n",
       "D      13           8      0\n",
       "H      15           1      9\n",
       "Q      15          14      4\n",
       "O      15           8     14\n",
       "T      18           6     10\n",
       "Z      18           8     14\n",
       "U      19           2      6"
      ]
     },
     "execution_count": 133,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sort_values(by='Python', ascending=True)  # 根据Python升序排序\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Y</th>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>W</th>\n",
       "      <td>1</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>S</th>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>L</th>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>6</td>\n",
       "      <td>13</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>P</th>\n",
       "      <td>7</td>\n",
       "      <td>13</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R</th>\n",
       "      <td>9</td>\n",
       "      <td>5</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>K</th>\n",
       "      <td>12</td>\n",
       "      <td>7</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>13</td>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>15</td>\n",
       "      <td>1</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>15</td>\n",
       "      <td>8</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>15</td>\n",
       "      <td>14</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>T</th>\n",
       "      <td>18</td>\n",
       "      <td>6</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Z</th>\n",
       "      <td>18</td>\n",
       "      <td>8</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>U</th>\n",
       "      <td>19</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow  Keras\n",
       "Y       0           4      5\n",
       "I       0           5      4\n",
       "F       0           5     15\n",
       "G       1           5      3\n",
       "E       1           6      8\n",
       "W       1          13      0\n",
       "A       2           9     19\n",
       "S       2           9      3\n",
       "L       5           4     16\n",
       "J       6          13     12\n",
       "P       7          13      8\n",
       "R       9           5     18\n",
       "K      12           7     18\n",
       "D      13           8      0\n",
       "H      15           1      9\n",
       "O      15           8     14\n",
       "Q      15          14      4\n",
       "T      18           6     10\n",
       "Z      18           8     14\n",
       "U      19           2      6"
      ]
     },
     "execution_count": 134,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sort_values(by=['Python', 'Tensorflow'], ascending=True)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>U</th>\n",
       "      <td>19</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>T</th>\n",
       "      <td>18</td>\n",
       "      <td>6</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Z</th>\n",
       "      <td>18</td>\n",
       "      <td>8</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>15</td>\n",
       "      <td>14</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>O</th>\n",
       "      <td>15</td>\n",
       "      <td>8</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow  Keras\n",
       "U      19           2      6\n",
       "T      18           6     10\n",
       "Z      18           8     14\n",
       "Q      15          14      4\n",
       "O      15           8     14"
      ]
     },
     "execution_count": 135,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.nlargest(n=5, columns=['Python'])  # 获取Python中最大的5个\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 136,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Tensorflow</th>\n",
       "      <th>Keras</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>W</th>\n",
       "      <td>1</td>\n",
       "      <td>13</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>13</td>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>S</th>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Q</th>\n",
       "      <td>15</td>\n",
       "      <td>14</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Python  Tensorflow  Keras\n",
       "W       1          13      0\n",
       "D      13           8      0\n",
       "S       2           9      3\n",
       "G       1           5      3\n",
       "Q      15          14      4"
      ]
     },
     "execution_count": 136,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.nsmallest(n=5, columns=['Keras'])  # 获取Keras中最小的5个\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 分箱操作"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将连续数据离散化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'pd' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
      "\u001B[1;31mNameError\u001B[0m                                 Traceback (most recent call last)",
      "Cell \u001B[1;32mIn[1], line 1\u001B[0m\n\u001B[1;32m----> 1\u001B[0m df \u001B[39m=\u001B[39m pd\u001B[39m.\u001B[39mDataFrame(data\u001B[39m=\u001B[39mnp\u001B[39m.\u001B[39mrandom\u001B[39m.\u001B[39mrandint(\u001B[39m0\u001B[39m, \u001B[39m151\u001B[39m, size\u001B[39m=\u001B[39m(\u001B[39m100\u001B[39m, \u001B[39m3\u001B[39m)),\n\u001B[0;32m      2\u001B[0m                   columns\u001B[39m=\u001B[39m[\u001B[39m'\u001B[39m\u001B[39mPython\u001B[39m\u001B[39m'\u001B[39m, \u001B[39m'\u001B[39m\u001B[39mMath\u001B[39m\u001B[39m'\u001B[39m, \u001B[39m'\u001B[39m\u001B[39mEn\u001B[39m\u001B[39m'\u001B[39m])\n\u001B[0;32m      3\u001B[0m df\n",
      "\u001B[1;31mNameError\u001B[0m: name 'pd' is not defined"
     ]
    }
   ],
   "source": [
    "df = pd.DataFrame(data=np.random.randint(0, 151, size=(100, 3)),\n",
    "                  columns=['Python', 'Math', 'En'])\n",
    "df\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0      优秀\n",
       "1      及格\n",
       "2      优秀\n",
       "3      优秀\n",
       "4      优秀\n",
       "     ... \n",
       "95     中等\n",
       "96    不及格\n",
       "97     优秀\n",
       "98     及格\n",
       "99     及格\n",
       "Name: Python, Length: 100, dtype: category\n",
       "Categories (4, object): ['不及格' < '及格' < '中等' < '优秀']"
      ]
     },
     "execution_count": 140,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 等宽划分\n",
    "pd.cut(df['Python'],  # 要分箱的数据\n",
    "       bins=4,  # 分成几段\n",
    "       labels=['不及格', '及格', '中等', '优秀'],  # 每段的标签\n",
    "       right=True)  # 区间配置，右闭\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "      <th>等级</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>118</td>\n",
       "      <td>68</td>\n",
       "      <td>13</td>\n",
       "      <td>中等</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>72</td>\n",
       "      <td>28</td>\n",
       "      <td>44</td>\n",
       "      <td>及格</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>132</td>\n",
       "      <td>98</td>\n",
       "      <td>132</td>\n",
       "      <td>优秀</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>123</td>\n",
       "      <td>113</td>\n",
       "      <td>79</td>\n",
       "      <td>优秀</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>125</td>\n",
       "      <td>129</td>\n",
       "      <td>119</td>\n",
       "      <td>优秀</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>110</td>\n",
       "      <td>20</td>\n",
       "      <td>9</td>\n",
       "      <td>中等</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>30</td>\n",
       "      <td>126</td>\n",
       "      <td>22</td>\n",
       "      <td>极差</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>122</td>\n",
       "      <td>59</td>\n",
       "      <td>81</td>\n",
       "      <td>优秀</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>48</td>\n",
       "      <td>120</td>\n",
       "      <td>84</td>\n",
       "      <td>不及格</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>67</td>\n",
       "      <td>17</td>\n",
       "      <td>40</td>\n",
       "      <td>及格</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>100 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    Python  Math   En   等级\n",
       "0      118    68   13   中等\n",
       "1       72    28   44   及格\n",
       "2      132    98  132   优秀\n",
       "3      123   113   79   优秀\n",
       "4      125   129  119   优秀\n",
       "..     ...   ...  ...  ...\n",
       "95     110    20    9   中等\n",
       "96      30   126   22   极差\n",
       "97     122    59   81   优秀\n",
       "98      48   120   84  不及格\n",
       "99      67    17   40   及格\n",
       "\n",
       "[100 rows x 4 columns]"
      ]
     },
     "execution_count": 141,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['等级'] = pd.cut(df.Python,\n",
    "                    bins=[0, 30, 60, 90, 120, 150],\n",
    "                    labels=['极差', '不及格', '及格', '中等', '优秀'])\n",
    "df\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0      中等\n",
       "1      及格\n",
       "2      优秀\n",
       "3      优秀\n",
       "4      优秀\n",
       "     ... \n",
       "95     中等\n",
       "96    不及格\n",
       "97     优秀\n",
       "98     及格\n",
       "99     及格\n",
       "Name: Python, Length: 100, dtype: category\n",
       "Categories (4, object): ['不及格' < '及格' < '中等' < '优秀']"
      ]
     },
     "execution_count": 142,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.qcut(df['Python'],\n",
    "        q=4,\n",
    "        labels=['不及格', '及格', '中等', '优秀'])  # 等频划分，使几个label的分布大约相同\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 分组聚合"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分组"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-06T23:04:45.703043Z",
     "start_time": "2023-04-06T23:04:44.291240Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>sex</th>\n",
       "      <th>class</th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>女</td>\n",
       "      <td>5</td>\n",
       "      <td>104</td>\n",
       "      <td>8</td>\n",
       "      <td>97</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>男</td>\n",
       "      <td>3</td>\n",
       "      <td>33</td>\n",
       "      <td>55</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>女</td>\n",
       "      <td>6</td>\n",
       "      <td>51</td>\n",
       "      <td>85</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>男</td>\n",
       "      <td>8</td>\n",
       "      <td>138</td>\n",
       "      <td>26</td>\n",
       "      <td>74</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>男</td>\n",
       "      <td>6</td>\n",
       "      <td>114</td>\n",
       "      <td>127</td>\n",
       "      <td>78</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>295</th>\n",
       "      <td>男</td>\n",
       "      <td>6</td>\n",
       "      <td>52</td>\n",
       "      <td>30</td>\n",
       "      <td>27</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>296</th>\n",
       "      <td>男</td>\n",
       "      <td>1</td>\n",
       "      <td>79</td>\n",
       "      <td>115</td>\n",
       "      <td>147</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>297</th>\n",
       "      <td>男</td>\n",
       "      <td>8</td>\n",
       "      <td>92</td>\n",
       "      <td>34</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>298</th>\n",
       "      <td>男</td>\n",
       "      <td>4</td>\n",
       "      <td>44</td>\n",
       "      <td>6</td>\n",
       "      <td>64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>299</th>\n",
       "      <td>女</td>\n",
       "      <td>6</td>\n",
       "      <td>131</td>\n",
       "      <td>61</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>300 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    sex  class  Python  Math   En\n",
       "0     女      5     104     8   97\n",
       "1     男      3      33    55    6\n",
       "2     女      6      51    85    1\n",
       "3     男      8     138    26   74\n",
       "4     男      6     114   127   78\n",
       "..   ..    ...     ...   ...  ...\n",
       "295   男      6      52    30   27\n",
       "296   男      1      79   115  147\n",
       "297   男      8      92    34   13\n",
       "298   男      4      44     6   64\n",
       "299   女      6     131    61   17\n",
       "\n",
       "[300 rows x 5 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(data={'sex': np.random.randint(0, 2, size=300),\n",
    "                        'class': np.random.randint(1, 9, size=300),\n",
    "                        'Python': np.random.randint(0, 151, size=300),\n",
    "                        'Math': np.random.randint(0, 151, size=300),\n",
    "                        'En': np.random.randint(0, 151, size=300)})\n",
    "df['sex'] = df['sex'].map({0: '男', 1: '女'})\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-06T23:04:45.712013Z",
     "start_time": "2023-04-06T23:04:44.330595Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "女\n",
      "    sex  class  Python  Math   En\n",
      "0     女      5     104     8   97\n",
      "2     女      6      51    85    1\n",
      "5     女      3     107    51  129\n",
      "6     女      8     119   146   82\n",
      "7     女      3      81    69   38\n",
      "..   ..    ...     ...   ...  ...\n",
      "285   女      6      91    99   93\n",
      "288   女      8      70    72   41\n",
      "292   女      1      37   150   92\n",
      "293   女      5     136    15  132\n",
      "299   女      6     131    61   17\n",
      "\n",
      "[158 rows x 5 columns]\n",
      "男\n",
      "    sex  class  Python  Math   En\n",
      "1     男      3      33    55    6\n",
      "3     男      8     138    26   74\n",
      "4     男      6     114   127   78\n",
      "8     男      6      21    77   65\n",
      "12    男      3     119     4   23\n",
      "..   ..    ...     ...   ...  ...\n",
      "294   男      3      22    51   31\n",
      "295   男      6      52    30   27\n",
      "296   男      1      79   115  147\n",
      "297   男      8      92    34   13\n",
      "298   男      4      44     6   64\n",
      "\n",
      "[142 rows x 5 columns]\n"
     ]
    }
   ],
   "source": [
    "for name, group in df.groupby('sex'):  #单分组\n",
    "    print(name)\n",
    "    print(group)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-06T23:04:45.899828Z",
     "start_time": "2023-04-06T23:04:44.361392Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('女', 1)\n",
      "    sex  class  Python  Math   En\n",
      "22    女      1      60   100    2\n",
      "28    女      1      58   121  119\n",
      "69    女      1      56    85    0\n",
      "81    女      1      58    33  110\n",
      "102   女      1      43   110   81\n",
      "125   女      1       5    93  127\n",
      "186   女      1     116    39   34\n",
      "195   女      1     111    53  143\n",
      "209   女      1      65   122  110\n",
      "214   女      1      64    28  134\n",
      "216   女      1     106   107   52\n",
      "230   女      1     115    35  122\n",
      "251   女      1     133   123   56\n",
      "252   女      1     123   133   37\n",
      "262   女      1     100   101  125\n",
      "292   女      1      37   150   92\n",
      "('女', 2)\n",
      "    sex  class  Python  Math   En\n",
      "25    女      2     105    74    1\n",
      "36    女      2      60    75    1\n",
      "46    女      2      60    66  129\n",
      "82    女      2      51    26  121\n",
      "103   女      2      67   143   57\n",
      "110   女      2     142   130  146\n",
      "118   女      2      46    93  149\n",
      "121   女      2      58    30   25\n",
      "126   女      2      94    98  113\n",
      "154   女      2      67    75   40\n",
      "157   女      2     125    31  138\n",
      "166   女      2      60   141   33\n",
      "198   女      2      88   107   89\n",
      "201   女      2     127   150   47\n",
      "208   女      2     146    86   31\n",
      "213   女      2      84    22   31\n",
      "222   女      2     101   100   73\n",
      "236   女      2     123    69   75\n",
      "243   女      2      71    29   96\n",
      "249   女      2      24    73   61\n",
      "263   女      2       1    86   60\n",
      "265   女      2     147    99   36\n",
      "('女', 3)\n",
      "    sex  class  Python  Math   En\n",
      "5     女      3     107    51  129\n",
      "7     女      3      81    69   38\n",
      "10    女      3      95    80   23\n",
      "11    女      3      33    12   55\n",
      "18    女      3      68   124  134\n",
      "30    女      3      16     6   95\n",
      "32    女      3      45   138   14\n",
      "90    女      3      40    95  127\n",
      "98    女      3       6   129   92\n",
      "140   女      3     148    22   60\n",
      "144   女      3     130   108   12\n",
      "151   女      3      76    10    5\n",
      "159   女      3      84    22   43\n",
      "161   女      3      38   136  126\n",
      "164   女      3      61    35   47\n",
      "171   女      3       2    30   61\n",
      "248   女      3      20    34   84\n",
      "282   女      3      73    25  111\n",
      "('女', 4)\n",
      "    sex  class  Python  Math   En\n",
      "20    女      4      60   115   13\n",
      "24    女      4      73   121    5\n",
      "27    女      4      94   133   89\n",
      "33    女      4      95    24   58\n",
      "35    女      4     146    87  114\n",
      "40    女      4      11   136   36\n",
      "50    女      4      62    79    3\n",
      "67    女      4      41    24  121\n",
      "85    女      4      43     5  118\n",
      "108   女      4     128   144   52\n",
      "116   女      4       6    75  143\n",
      "124   女      4      96    46   12\n",
      "129   女      4     100   149  126\n",
      "131   女      4     116   148   16\n",
      "141   女      4      18    92  135\n",
      "152   女      4     150   130   48\n",
      "168   女      4     125    17   33\n",
      "175   女      4      91   128   37\n",
      "190   女      4       7   105    3\n",
      "220   女      4     132    43   85\n",
      "253   女      4      76    39   89\n",
      "('女', 5)\n",
      "    sex  class  Python  Math   En\n",
      "0     女      5     104     8   97\n",
      "31    女      5      27   149   50\n",
      "45    女      5      30    88   70\n",
      "52    女      5      51    57   51\n",
      "71    女      5      56   117   44\n",
      "83    女      5      35   148   70\n",
      "91    女      5      10   131   82\n",
      "95    女      5     139    82  141\n",
      "99    女      5      69   105   33\n",
      "115   女      5      12    63  133\n",
      "145   女      5     110    72   44\n",
      "182   女      5      39   114   42\n",
      "194   女      5     135    72  141\n",
      "225   女      5     128   110  148\n",
      "231   女      5      75    23  139\n",
      "260   女      5     117    94   63\n",
      "261   女      5      33    38   72\n",
      "284   女      5      89   142  132\n",
      "293   女      5     136    15  132\n",
      "('女', 6)\n",
      "    sex  class  Python  Math   En\n",
      "2     女      6      51    85    1\n",
      "9     女      6      92    85   28\n",
      "21    女      6      24    24   47\n",
      "49    女      6      79    30  120\n",
      "94    女      6     128    47  101\n",
      "100   女      6     110    39   85\n",
      "109   女      6      50    39    1\n",
      "128   女      6     101    37  102\n",
      "143   女      6     122    78   72\n",
      "147   女      6      79   113  112\n",
      "167   女      6     110    69   31\n",
      "177   女      6      44     8  107\n",
      "184   女      6      48    17  132\n",
      "185   女      6     118    31  122\n",
      "210   女      6     130    65   43\n",
      "223   女      6     146   129  113\n",
      "226   女      6      69    84   46\n",
      "242   女      6     143    84  140\n",
      "245   女      6     124    15   18\n",
      "258   女      6     132    57   82\n",
      "266   女      6      38   146    7\n",
      "267   女      6     104   114   96\n",
      "281   女      6      39    29   54\n",
      "283   女      6      98    34   14\n",
      "285   女      6      91    99   93\n",
      "299   女      6     131    61   17\n",
      "('女', 7)\n",
      "    sex  class  Python  Math   En\n",
      "14    女      7      26    54  124\n",
      "26    女      7      41    75   41\n",
      "47    女      7     121   142   47\n",
      "64    女      7      52    48  130\n",
      "112   女      7     109     1   71\n",
      "119   女      7     141   143   36\n",
      "133   女      7       1   131   78\n",
      "150   女      7     141   104   47\n",
      "172   女      7      21    20   12\n",
      "178   女      7     106     8  133\n",
      "187   女      7      87   121   48\n",
      "215   女      7      70    69  123\n",
      "218   女      7     100    45   26\n",
      "233   女      7     120     7  116\n",
      "234   女      7     135   135    6\n",
      "235   女      7      20    44    1\n",
      "271   女      7      62    82   63\n",
      "277   女      7     115     3   29\n",
      "('女', 8)\n",
      "    sex  class  Python  Math   En\n",
      "6     女      8     119   146   82\n",
      "29    女      8      50    47   87\n",
      "34    女      8      75    66   84\n",
      "43    女      8      16    20   55\n",
      "55    女      8      94    19    9\n",
      "58    女      8      88    42   46\n",
      "61    女      8     113     8  120\n",
      "63    女      8      70   126  133\n",
      "68    女      8      53    90  134\n",
      "87    女      8      85     5  144\n",
      "137   女      8     144   124   45\n",
      "142   女      8      38    73  125\n",
      "146   女      8       4    81   68\n",
      "156   女      8      98    80   56\n",
      "160   女      8      40    90   58\n",
      "181   女      8     103     2   32\n",
      "241   女      8      62   103   20\n",
      "288   女      8      70    72   41\n",
      "('男', 1)\n",
      "    sex  class  Python  Math   En\n",
      "15    男      1      89     7   13\n",
      "38    男      1     147    92   80\n",
      "76    男      1      97    34  106\n",
      "77    男      1      95   108  102\n",
      "92    男      1      49   113    7\n",
      "97    男      1      39    82   47\n",
      "105   男      1     134    36   33\n",
      "176   男      1      68    29    0\n",
      "180   男      1      36   120   73\n",
      "193   男      1      75    99  146\n",
      "196   男      1      89   109   65\n",
      "197   男      1      80    27   24\n",
      "200   男      1      76    83   69\n",
      "205   男      1      87    36   39\n",
      "237   男      1     114     6  149\n",
      "246   男      1     124   100    0\n",
      "257   男      1     126    91  126\n",
      "264   男      1      82   118   24\n",
      "273   男      1     115    89  130\n",
      "287   男      1      19    64   72\n",
      "296   男      1      79   115  147\n",
      "('男', 2)\n",
      "    sex  class  Python  Math   En\n",
      "62    男      2     146    85   88\n",
      "74    男      2     133   120   55\n",
      "75    男      2     107    27  117\n",
      "86    男      2     131    57   39\n",
      "104   男      2      32    16   50\n",
      "134   男      2      16    54   51\n",
      "155   男      2     141    17  102\n",
      "173   男      2       0    83  117\n",
      "191   男      2     137    35  101\n",
      "228   男      2      58    19    7\n",
      "238   男      2     140   118   53\n",
      "259   男      2      82    19   86\n",
      "269   男      2     142    79  101\n",
      "286   男      2      20    23  144\n",
      "('男', 3)\n",
      "    sex  class  Python  Math   En\n",
      "1     男      3      33    55    6\n",
      "12    男      3     119     4   23\n",
      "16    男      3      22    60  147\n",
      "42    男      3     146     5    0\n",
      "80    男      3     135   101  138\n",
      "84    男      3       7    90  148\n",
      "120   男      3      20    57  130\n",
      "139   男      3      10     4  127\n",
      "149   男      3      43    71  124\n",
      "174   男      3      54    20  108\n",
      "179   男      3       9    91   52\n",
      "211   男      3      99     4   39\n",
      "219   男      3      94    29  131\n",
      "224   男      3      76    49  107\n",
      "240   男      3      58    55  122\n",
      "254   男      3      35   140   69\n",
      "272   男      3     122    27   58\n",
      "294   男      3      22    51   31\n",
      "('男', 4)\n",
      "    sex  class  Python  Math   En\n",
      "48    男      4      96    60   84\n",
      "53    男      4     148   123  141\n",
      "59    男      4     150   139   37\n",
      "130   男      4      56   128   73\n",
      "132   男      4      62    57  145\n",
      "135   男      4     101    17   97\n",
      "158   男      4      27    90   82\n",
      "183   男      4      13    51  144\n",
      "192   男      4     107   112    5\n",
      "202   男      4     126    23   94\n",
      "217   男      4      60    39  139\n",
      "256   男      4      59   106  137\n",
      "280   男      4      59    96   21\n",
      "298   男      4      44     6   64\n",
      "('男', 5)\n",
      "    sex  class  Python  Math   En\n",
      "19    男      5      38   137   32\n",
      "23    男      5      56    67   65\n",
      "54    男      5      27    66  126\n",
      "72    男      5       0   141  136\n",
      "79    男      5      25   145   17\n",
      "106   男      5      73   100   34\n",
      "107   男      5     113    96  122\n",
      "117   男      5       4   126   50\n",
      "127   男      5     138     1    7\n",
      "148   男      5     127   146  148\n",
      "153   男      5     143    75  106\n",
      "162   男      5     136     6    2\n",
      "170   男      5      16    35  130\n",
      "189   男      5      34    61   17\n",
      "199   男      5      66    47   75\n",
      "204   男      5      10    97   96\n",
      "206   男      5      68   142   24\n",
      "221   男      5     134   124  112\n",
      "229   男      5      74    14   29\n",
      "247   男      5     130     2   85\n",
      "268   男      5     118    18   63\n",
      "278   男      5      71   143   88\n",
      "('男', 6)\n",
      "    sex  class  Python  Math   En\n",
      "4     男      6     114   127   78\n",
      "8     男      6      21    77   65\n",
      "56    男      6       2   102   68\n",
      "73    男      6     150    73    3\n",
      "93    男      6      63    52   82\n",
      "113   男      6      63    89  133\n",
      "123   男      6     126   140   94\n",
      "136   男      6     129    88   71\n",
      "138   男      6     102    87   40\n",
      "207   男      6     125    52   26\n",
      "232   男      6      30   121   16\n",
      "255   男      6     110   105   64\n",
      "275   男      6     139    94   84\n",
      "276   男      6      67     1   61\n",
      "291   男      6      59   119   36\n",
      "295   男      6      52    30   27\n",
      "('男', 7)\n",
      "    sex  class  Python  Math   En\n",
      "13    男      7      26   120    4\n",
      "41    男      7     131    17   98\n",
      "44    男      7      70    78   28\n",
      "51    男      7      19    55  133\n",
      "57    男      7       0    25   30\n",
      "60    男      7      79   115   95\n",
      "65    男      7       4   110  147\n",
      "88    男      7       5     4   92\n",
      "101   男      7     124    72  123\n",
      "114   男      7      43    74   30\n",
      "188   男      7     120   120   76\n",
      "203   男      7      29   136  113\n",
      "239   男      7       7   133   62\n",
      "244   男      7     132    14    3\n",
      "290   男      7      55    51  106\n",
      "('男', 8)\n",
      "    sex  class  Python  Math   En\n",
      "3     男      8     138    26   74\n",
      "17    男      8     141    47   67\n",
      "37    男      8      37    48  108\n",
      "39    男      8      30    65   34\n",
      "66    男      8       2    75   33\n",
      "70    男      8      97    71   92\n",
      "78    男      8      65    75   77\n",
      "89    男      8      73    37    8\n",
      "96    男      8      99     3  146\n",
      "111   男      8      20    71   91\n",
      "122   男      8     125   139  119\n",
      "163   男      8      86    34  124\n",
      "165   男      8      76    81    4\n",
      "169   男      8      26   128   58\n",
      "212   男      8      83    87   73\n",
      "227   男      8      71   110   36\n",
      "250   男      8     129    56   47\n",
      "270   男      8     101    36  130\n",
      "274   男      8      89    12   70\n",
      "279   男      8      85   122   49\n",
      "289   男      8      92    75   55\n",
      "297   男      8      92    34   13\n"
     ]
    }
   ],
   "source": [
    "for name, group in df.groupby(['sex', 'class']):  # 多分组\n",
    "    print(name)\n",
    "    print(group)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-06T23:04:45.944711Z",
     "start_time": "2023-04-06T23:04:44.426731Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "女\n",
      "0      104\n",
      "2       51\n",
      "5      107\n",
      "6      119\n",
      "7       81\n",
      "      ... \n",
      "285     91\n",
      "288     70\n",
      "292     37\n",
      "293    136\n",
      "299    131\n",
      "Name: Python, Length: 158, dtype: int32\n",
      "男\n",
      "1       33\n",
      "3      138\n",
      "4      114\n",
      "8       21\n",
      "12     119\n",
      "      ... \n",
      "294     22\n",
      "295     52\n",
      "296     79\n",
      "297     92\n",
      "298     44\n",
      "Name: Python, Length: 142, dtype: int32\n"
     ]
    }
   ],
   "source": [
    "for name, group in df['Python'].groupby(df['sex']):\n",
    "    print(name)\n",
    "    print(group)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-06T23:04:45.978660Z",
     "start_time": "2023-04-06T23:04:44.442689Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('女', 1)\n",
      "     Python  Math\n",
      "22       60   100\n",
      "28       58   121\n",
      "69       56    85\n",
      "81       58    33\n",
      "102      43   110\n",
      "125       5    93\n",
      "186     116    39\n",
      "195     111    53\n",
      "209      65   122\n",
      "214      64    28\n",
      "216     106   107\n",
      "230     115    35\n",
      "251     133   123\n",
      "252     123   133\n",
      "262     100   101\n",
      "292      37   150\n",
      "('女', 2)\n",
      "     Python  Math\n",
      "25      105    74\n",
      "36       60    75\n",
      "46       60    66\n",
      "82       51    26\n",
      "103      67   143\n",
      "110     142   130\n",
      "118      46    93\n",
      "121      58    30\n",
      "126      94    98\n",
      "154      67    75\n",
      "157     125    31\n",
      "166      60   141\n",
      "198      88   107\n",
      "201     127   150\n",
      "208     146    86\n",
      "213      84    22\n",
      "222     101   100\n",
      "236     123    69\n",
      "243      71    29\n",
      "249      24    73\n",
      "263       1    86\n",
      "265     147    99\n",
      "('女', 3)\n",
      "     Python  Math\n",
      "5       107    51\n",
      "7        81    69\n",
      "10       95    80\n",
      "11       33    12\n",
      "18       68   124\n",
      "30       16     6\n",
      "32       45   138\n",
      "90       40    95\n",
      "98        6   129\n",
      "140     148    22\n",
      "144     130   108\n",
      "151      76    10\n",
      "159      84    22\n",
      "161      38   136\n",
      "164      61    35\n",
      "171       2    30\n",
      "248      20    34\n",
      "282      73    25\n",
      "('女', 4)\n",
      "     Python  Math\n",
      "20       60   115\n",
      "24       73   121\n",
      "27       94   133\n",
      "33       95    24\n",
      "35      146    87\n",
      "40       11   136\n",
      "50       62    79\n",
      "67       41    24\n",
      "85       43     5\n",
      "108     128   144\n",
      "116       6    75\n",
      "124      96    46\n",
      "129     100   149\n",
      "131     116   148\n",
      "141      18    92\n",
      "152     150   130\n",
      "168     125    17\n",
      "175      91   128\n",
      "190       7   105\n",
      "220     132    43\n",
      "253      76    39\n",
      "('女', 5)\n",
      "     Python  Math\n",
      "0       104     8\n",
      "31       27   149\n",
      "45       30    88\n",
      "52       51    57\n",
      "71       56   117\n",
      "83       35   148\n",
      "91       10   131\n",
      "95      139    82\n",
      "99       69   105\n",
      "115      12    63\n",
      "145     110    72\n",
      "182      39   114\n",
      "194     135    72\n",
      "225     128   110\n",
      "231      75    23\n",
      "260     117    94\n",
      "261      33    38\n",
      "284      89   142\n",
      "293     136    15\n",
      "('女', 6)\n",
      "     Python  Math\n",
      "2        51    85\n",
      "9        92    85\n",
      "21       24    24\n",
      "49       79    30\n",
      "94      128    47\n",
      "100     110    39\n",
      "109      50    39\n",
      "128     101    37\n",
      "143     122    78\n",
      "147      79   113\n",
      "167     110    69\n",
      "177      44     8\n",
      "184      48    17\n",
      "185     118    31\n",
      "210     130    65\n",
      "223     146   129\n",
      "226      69    84\n",
      "242     143    84\n",
      "245     124    15\n",
      "258     132    57\n",
      "266      38   146\n",
      "267     104   114\n",
      "281      39    29\n",
      "283      98    34\n",
      "285      91    99\n",
      "299     131    61\n",
      "('女', 7)\n",
      "     Python  Math\n",
      "14       26    54\n",
      "26       41    75\n",
      "47      121   142\n",
      "64       52    48\n",
      "112     109     1\n",
      "119     141   143\n",
      "133       1   131\n",
      "150     141   104\n",
      "172      21    20\n",
      "178     106     8\n",
      "187      87   121\n",
      "215      70    69\n",
      "218     100    45\n",
      "233     120     7\n",
      "234     135   135\n",
      "235      20    44\n",
      "271      62    82\n",
      "277     115     3\n",
      "('女', 8)\n",
      "     Python  Math\n",
      "6       119   146\n",
      "29       50    47\n",
      "34       75    66\n",
      "43       16    20\n",
      "55       94    19\n",
      "58       88    42\n",
      "61      113     8\n",
      "63       70   126\n",
      "68       53    90\n",
      "87       85     5\n",
      "137     144   124\n",
      "142      38    73\n",
      "146       4    81\n",
      "156      98    80\n",
      "160      40    90\n",
      "181     103     2\n",
      "241      62   103\n",
      "288      70    72\n",
      "('男', 1)\n",
      "     Python  Math\n",
      "15       89     7\n",
      "38      147    92\n",
      "76       97    34\n",
      "77       95   108\n",
      "92       49   113\n",
      "97       39    82\n",
      "105     134    36\n",
      "176      68    29\n",
      "180      36   120\n",
      "193      75    99\n",
      "196      89   109\n",
      "197      80    27\n",
      "200      76    83\n",
      "205      87    36\n",
      "237     114     6\n",
      "246     124   100\n",
      "257     126    91\n",
      "264      82   118\n",
      "273     115    89\n",
      "287      19    64\n",
      "296      79   115\n",
      "('男', 2)\n",
      "     Python  Math\n",
      "62      146    85\n",
      "74      133   120\n",
      "75      107    27\n",
      "86      131    57\n",
      "104      32    16\n",
      "134      16    54\n",
      "155     141    17\n",
      "173       0    83\n",
      "191     137    35\n",
      "228      58    19\n",
      "238     140   118\n",
      "259      82    19\n",
      "269     142    79\n",
      "286      20    23\n",
      "('男', 3)\n",
      "     Python  Math\n",
      "1        33    55\n",
      "12      119     4\n",
      "16       22    60\n",
      "42      146     5\n",
      "80      135   101\n",
      "84        7    90\n",
      "120      20    57\n",
      "139      10     4\n",
      "149      43    71\n",
      "174      54    20\n",
      "179       9    91\n",
      "211      99     4\n",
      "219      94    29\n",
      "224      76    49\n",
      "240      58    55\n",
      "254      35   140\n",
      "272     122    27\n",
      "294      22    51\n",
      "('男', 4)\n",
      "     Python  Math\n",
      "48       96    60\n",
      "53      148   123\n",
      "59      150   139\n",
      "130      56   128\n",
      "132      62    57\n",
      "135     101    17\n",
      "158      27    90\n",
      "183      13    51\n",
      "192     107   112\n",
      "202     126    23\n",
      "217      60    39\n",
      "256      59   106\n",
      "280      59    96\n",
      "298      44     6\n",
      "('男', 5)\n",
      "     Python  Math\n",
      "19       38   137\n",
      "23       56    67\n",
      "54       27    66\n",
      "72        0   141\n",
      "79       25   145\n",
      "106      73   100\n",
      "107     113    96\n",
      "117       4   126\n",
      "127     138     1\n",
      "148     127   146\n",
      "153     143    75\n",
      "162     136     6\n",
      "170      16    35\n",
      "189      34    61\n",
      "199      66    47\n",
      "204      10    97\n",
      "206      68   142\n",
      "221     134   124\n",
      "229      74    14\n",
      "247     130     2\n",
      "268     118    18\n",
      "278      71   143\n",
      "('男', 6)\n",
      "     Python  Math\n",
      "4       114   127\n",
      "8        21    77\n",
      "56        2   102\n",
      "73      150    73\n",
      "93       63    52\n",
      "113      63    89\n",
      "123     126   140\n",
      "136     129    88\n",
      "138     102    87\n",
      "207     125    52\n",
      "232      30   121\n",
      "255     110   105\n",
      "275     139    94\n",
      "276      67     1\n",
      "291      59   119\n",
      "295      52    30\n",
      "('男', 7)\n",
      "     Python  Math\n",
      "13       26   120\n",
      "41      131    17\n",
      "44       70    78\n",
      "51       19    55\n",
      "57        0    25\n",
      "60       79   115\n",
      "65        4   110\n",
      "88        5     4\n",
      "101     124    72\n",
      "114      43    74\n",
      "188     120   120\n",
      "203      29   136\n",
      "239       7   133\n",
      "244     132    14\n",
      "290      55    51\n",
      "('男', 8)\n",
      "     Python  Math\n",
      "3       138    26\n",
      "17      141    47\n",
      "37       37    48\n",
      "39       30    65\n",
      "66        2    75\n",
      "70       97    71\n",
      "78       65    75\n",
      "89       73    37\n",
      "96       99     3\n",
      "111      20    71\n",
      "122     125   139\n",
      "163      86    34\n",
      "165      76    81\n",
      "169      26   128\n",
      "212      83    87\n",
      "227      71   110\n",
      "250     129    56\n",
      "270     101    36\n",
      "274      89    12\n",
      "279      85   122\n",
      "289      92    75\n",
      "297      92    34\n"
     ]
    }
   ],
   "source": [
    "for name, group in df[['Python', 'Math']].groupby([df['sex'], df['class']]):\n",
    "    print(name)\n",
    "    print(group)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-06T23:04:46.063425Z",
     "start_time": "2023-04-06T23:04:44.496856Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "int32\n",
      "     class  Python  Math   En\n",
      "0        5     104     8   97\n",
      "1        3      33    55    6\n",
      "2        6      51    85    1\n",
      "3        8     138    26   74\n",
      "4        6     114   127   78\n",
      "..     ...     ...   ...  ...\n",
      "295      6      52    30   27\n",
      "296      1      79   115  147\n",
      "297      8      92    34   13\n",
      "298      4      44     6   64\n",
      "299      6     131    61   17\n",
      "\n",
      "[300 rows x 4 columns]\n",
      "object\n",
      "    sex\n",
      "0     女\n",
      "1     男\n",
      "2     女\n",
      "3     男\n",
      "4     男\n",
      "..   ..\n",
      "295   男\n",
      "296   男\n",
      "297   男\n",
      "298   男\n",
      "299   女\n",
      "\n",
      "[300 rows x 1 columns]\n"
     ]
    }
   ],
   "source": [
    "for name, group in df.groupby(df.dtypes, axis=1):  # 根据数据类型进行分组\n",
    "    print(name)\n",
    "    print(group)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-06T23:04:46.063425Z",
     "start_time": "2023-04-06T23:04:44.519778Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "category\n",
      "    sex  class\n",
      "0     女      5\n",
      "1     男      3\n",
      "2     女      6\n",
      "3     男      8\n",
      "4     男      6\n",
      "..   ..    ...\n",
      "295   男      6\n",
      "296   男      1\n",
      "297   男      8\n",
      "298   男      4\n",
      "299   女      6\n",
      "\n",
      "[300 rows x 2 columns]\n",
      "科目\n",
      "     Python  Math   En\n",
      "0       104     8   97\n",
      "1        33    55    6\n",
      "2        51    85    1\n",
      "3       138    26   74\n",
      "4       114   127   78\n",
      "..      ...   ...  ...\n",
      "295      52    30   27\n",
      "296      79   115  147\n",
      "297      92    34   13\n",
      "298      44     6   64\n",
      "299     131    61   17\n",
      "\n",
      "[300 rows x 3 columns]\n"
     ]
    }
   ],
   "source": [
    "m = {'sex': 'category', 'class': 'category',\n",
    "     'Python': '科目', 'Math': '科目', 'En': '科目'}\n",
    "for name, group in df.groupby(m, axis=1):\n",
    "    print(name)\n",
    "    print(group)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分组聚合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-06T23:04:46.064428Z",
     "start_time": "2023-04-06T23:04:44.551691Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>sex</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>女</th>\n",
       "      <td>150</td>\n",
       "      <td>150</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>男</th>\n",
       "      <td>150</td>\n",
       "      <td>146</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     Python  Math\n",
       "sex              \n",
       "女       150   150\n",
       "男       150   146"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby('sex')[['Python', 'Math']].max()  # 每个类别的最大值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-06T23:04:46.064428Z",
     "start_time": "2023-04-06T23:04:44.580614Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>sex</th>\n",
       "      <th>class</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"8\" valign=\"top\">女</th>\n",
       "      <th>1</th>\n",
       "      <td>78.1</td>\n",
       "      <td>89.6</td>\n",
       "      <td>84.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>84.0</td>\n",
       "      <td>82.0</td>\n",
       "      <td>70.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>62.4</td>\n",
       "      <td>62.6</td>\n",
       "      <td>69.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>79.5</td>\n",
       "      <td>87.6</td>\n",
       "      <td>63.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>73.4</td>\n",
       "      <td>85.7</td>\n",
       "      <td>88.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>92.3</td>\n",
       "      <td>62.3</td>\n",
       "      <td>68.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>81.6</td>\n",
       "      <td>68.4</td>\n",
       "      <td>62.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>73.4</td>\n",
       "      <td>66.3</td>\n",
       "      <td>74.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"8\" valign=\"top\">男</th>\n",
       "      <th>1</th>\n",
       "      <td>86.7</td>\n",
       "      <td>74.2</td>\n",
       "      <td>69.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>91.8</td>\n",
       "      <td>53.7</td>\n",
       "      <td>79.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>61.3</td>\n",
       "      <td>50.7</td>\n",
       "      <td>86.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>79.1</td>\n",
       "      <td>74.8</td>\n",
       "      <td>90.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>72.8</td>\n",
       "      <td>81.3</td>\n",
       "      <td>71.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>84.5</td>\n",
       "      <td>84.8</td>\n",
       "      <td>59.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>56.3</td>\n",
       "      <td>74.9</td>\n",
       "      <td>76.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>79.9</td>\n",
       "      <td>65.1</td>\n",
       "      <td>68.5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           Python  Math    En\n",
       "sex class                    \n",
       "女   1        78.1  89.6  84.0\n",
       "    2        84.0  82.0  70.5\n",
       "    3        62.4  62.6  69.8\n",
       "    4        79.5  87.6  63.6\n",
       "    5        73.4  85.7  88.6\n",
       "    6        92.3  62.3  68.6\n",
       "    7        81.6  68.4  62.8\n",
       "    8        73.4  66.3  74.4\n",
       "男   1        86.7  74.2  69.1\n",
       "    2        91.8  53.7  79.4\n",
       "    3        61.3  50.7  86.7\n",
       "    4        79.1  74.8  90.2\n",
       "    5        72.8  81.3  71.1\n",
       "    6        84.5  84.8  59.2\n",
       "    7        56.3  74.9  76.0\n",
       "    8        79.9  65.1  68.5"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby(['sex', 'class']).mean().round(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-06T23:04:46.064428Z",
     "start_time": "2023-04-06T23:04:44.611531Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "sex  class\n",
       "女    1        16\n",
       "     2        22\n",
       "     3        18\n",
       "     4        21\n",
       "     5        19\n",
       "     6        26\n",
       "     7        18\n",
       "     8        18\n",
       "男    1        21\n",
       "     2        14\n",
       "     3        18\n",
       "     4        14\n",
       "     5        22\n",
       "     6        16\n",
       "     7        15\n",
       "     8        22\n",
       "dtype: int64"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby(['sex', 'class']).size()  # 统计各班男女人数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-06T23:04:46.099394Z",
     "start_time": "2023-04-06T23:04:44.626491Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th colspan=\"8\" halign=\"left\">Python</th>\n",
       "      <th colspan=\"5\" halign=\"left\">Math</th>\n",
       "      <th colspan=\"8\" halign=\"left\">En</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>25%</th>\n",
       "      <th>50%</th>\n",
       "      <th>75%</th>\n",
       "      <th>max</th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>...</th>\n",
       "      <th>75%</th>\n",
       "      <th>max</th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>25%</th>\n",
       "      <th>50%</th>\n",
       "      <th>75%</th>\n",
       "      <th>max</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>sex</th>\n",
       "      <th>class</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"8\" valign=\"top\">女</th>\n",
       "      <th>1</th>\n",
       "      <td>16.0</td>\n",
       "      <td>78.1</td>\n",
       "      <td>36.9</td>\n",
       "      <td>5.0</td>\n",
       "      <td>57.5</td>\n",
       "      <td>64.5</td>\n",
       "      <td>112.0</td>\n",
       "      <td>133.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>89.6</td>\n",
       "      <td>...</td>\n",
       "      <td>121.2</td>\n",
       "      <td>150.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>84.0</td>\n",
       "      <td>47.5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>48.2</td>\n",
       "      <td>101.0</td>\n",
       "      <td>122.8</td>\n",
       "      <td>143.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>22.0</td>\n",
       "      <td>84.0</td>\n",
       "      <td>39.8</td>\n",
       "      <td>1.0</td>\n",
       "      <td>60.0</td>\n",
       "      <td>77.5</td>\n",
       "      <td>118.5</td>\n",
       "      <td>147.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>82.0</td>\n",
       "      <td>...</td>\n",
       "      <td>99.8</td>\n",
       "      <td>150.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>70.5</td>\n",
       "      <td>46.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>33.8</td>\n",
       "      <td>60.5</td>\n",
       "      <td>108.8</td>\n",
       "      <td>149.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>18.0</td>\n",
       "      <td>62.4</td>\n",
       "      <td>41.4</td>\n",
       "      <td>2.0</td>\n",
       "      <td>34.2</td>\n",
       "      <td>64.5</td>\n",
       "      <td>83.2</td>\n",
       "      <td>148.0</td>\n",
       "      <td>18.0</td>\n",
       "      <td>62.6</td>\n",
       "      <td>...</td>\n",
       "      <td>104.8</td>\n",
       "      <td>138.0</td>\n",
       "      <td>18.0</td>\n",
       "      <td>69.8</td>\n",
       "      <td>43.8</td>\n",
       "      <td>5.0</td>\n",
       "      <td>39.2</td>\n",
       "      <td>60.5</td>\n",
       "      <td>107.0</td>\n",
       "      <td>134.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>21.0</td>\n",
       "      <td>79.5</td>\n",
       "      <td>45.8</td>\n",
       "      <td>6.0</td>\n",
       "      <td>43.0</td>\n",
       "      <td>91.0</td>\n",
       "      <td>116.0</td>\n",
       "      <td>150.0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>87.6</td>\n",
       "      <td>...</td>\n",
       "      <td>130.0</td>\n",
       "      <td>149.0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>63.6</td>\n",
       "      <td>48.4</td>\n",
       "      <td>3.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>52.0</td>\n",
       "      <td>114.0</td>\n",
       "      <td>143.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>19.0</td>\n",
       "      <td>73.4</td>\n",
       "      <td>44.9</td>\n",
       "      <td>10.0</td>\n",
       "      <td>34.0</td>\n",
       "      <td>69.0</td>\n",
       "      <td>113.5</td>\n",
       "      <td>139.0</td>\n",
       "      <td>19.0</td>\n",
       "      <td>85.7</td>\n",
       "      <td>...</td>\n",
       "      <td>115.5</td>\n",
       "      <td>149.0</td>\n",
       "      <td>19.0</td>\n",
       "      <td>88.6</td>\n",
       "      <td>41.6</td>\n",
       "      <td>33.0</td>\n",
       "      <td>50.5</td>\n",
       "      <td>72.0</td>\n",
       "      <td>132.5</td>\n",
       "      <td>148.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>26.0</td>\n",
       "      <td>92.3</td>\n",
       "      <td>36.8</td>\n",
       "      <td>24.0</td>\n",
       "      <td>55.5</td>\n",
       "      <td>99.5</td>\n",
       "      <td>123.5</td>\n",
       "      <td>146.0</td>\n",
       "      <td>26.0</td>\n",
       "      <td>62.3</td>\n",
       "      <td>...</td>\n",
       "      <td>84.8</td>\n",
       "      <td>146.0</td>\n",
       "      <td>26.0</td>\n",
       "      <td>68.6</td>\n",
       "      <td>44.7</td>\n",
       "      <td>1.0</td>\n",
       "      <td>28.8</td>\n",
       "      <td>77.0</td>\n",
       "      <td>105.8</td>\n",
       "      <td>140.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>18.0</td>\n",
       "      <td>81.6</td>\n",
       "      <td>45.9</td>\n",
       "      <td>1.0</td>\n",
       "      <td>43.8</td>\n",
       "      <td>93.5</td>\n",
       "      <td>118.8</td>\n",
       "      <td>141.0</td>\n",
       "      <td>18.0</td>\n",
       "      <td>68.4</td>\n",
       "      <td>...</td>\n",
       "      <td>116.8</td>\n",
       "      <td>143.0</td>\n",
       "      <td>18.0</td>\n",
       "      <td>62.8</td>\n",
       "      <td>44.7</td>\n",
       "      <td>1.0</td>\n",
       "      <td>30.8</td>\n",
       "      <td>47.5</td>\n",
       "      <td>106.5</td>\n",
       "      <td>133.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>18.0</td>\n",
       "      <td>73.4</td>\n",
       "      <td>36.4</td>\n",
       "      <td>4.0</td>\n",
       "      <td>50.8</td>\n",
       "      <td>72.5</td>\n",
       "      <td>97.0</td>\n",
       "      <td>144.0</td>\n",
       "      <td>18.0</td>\n",
       "      <td>66.3</td>\n",
       "      <td>...</td>\n",
       "      <td>90.0</td>\n",
       "      <td>146.0</td>\n",
       "      <td>18.0</td>\n",
       "      <td>74.4</td>\n",
       "      <td>41.7</td>\n",
       "      <td>9.0</td>\n",
       "      <td>45.2</td>\n",
       "      <td>63.0</td>\n",
       "      <td>111.8</td>\n",
       "      <td>144.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"8\" valign=\"top\">男</th>\n",
       "      <th>1</th>\n",
       "      <td>21.0</td>\n",
       "      <td>86.7</td>\n",
       "      <td>33.3</td>\n",
       "      <td>19.0</td>\n",
       "      <td>75.0</td>\n",
       "      <td>87.0</td>\n",
       "      <td>114.0</td>\n",
       "      <td>147.0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>74.2</td>\n",
       "      <td>...</td>\n",
       "      <td>108.0</td>\n",
       "      <td>120.0</td>\n",
       "      <td>21.0</td>\n",
       "      <td>69.1</td>\n",
       "      <td>50.6</td>\n",
       "      <td>0.0</td>\n",
       "      <td>24.0</td>\n",
       "      <td>69.0</td>\n",
       "      <td>106.0</td>\n",
       "      <td>149.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14.0</td>\n",
       "      <td>91.8</td>\n",
       "      <td>55.4</td>\n",
       "      <td>0.0</td>\n",
       "      <td>38.5</td>\n",
       "      <td>119.0</td>\n",
       "      <td>139.2</td>\n",
       "      <td>146.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>53.7</td>\n",
       "      <td>...</td>\n",
       "      <td>82.0</td>\n",
       "      <td>120.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>79.4</td>\n",
       "      <td>37.6</td>\n",
       "      <td>7.0</td>\n",
       "      <td>51.5</td>\n",
       "      <td>87.0</td>\n",
       "      <td>101.8</td>\n",
       "      <td>144.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>18.0</td>\n",
       "      <td>61.3</td>\n",
       "      <td>46.9</td>\n",
       "      <td>7.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>48.5</td>\n",
       "      <td>97.8</td>\n",
       "      <td>146.0</td>\n",
       "      <td>18.0</td>\n",
       "      <td>50.7</td>\n",
       "      <td>...</td>\n",
       "      <td>68.2</td>\n",
       "      <td>140.0</td>\n",
       "      <td>18.0</td>\n",
       "      <td>86.7</td>\n",
       "      <td>51.3</td>\n",
       "      <td>0.0</td>\n",
       "      <td>42.2</td>\n",
       "      <td>107.5</td>\n",
       "      <td>129.2</td>\n",
       "      <td>148.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14.0</td>\n",
       "      <td>79.1</td>\n",
       "      <td>42.8</td>\n",
       "      <td>13.0</td>\n",
       "      <td>56.8</td>\n",
       "      <td>61.0</td>\n",
       "      <td>105.5</td>\n",
       "      <td>150.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>74.8</td>\n",
       "      <td>...</td>\n",
       "      <td>110.5</td>\n",
       "      <td>139.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>90.2</td>\n",
       "      <td>47.3</td>\n",
       "      <td>5.0</td>\n",
       "      <td>66.2</td>\n",
       "      <td>89.0</td>\n",
       "      <td>138.5</td>\n",
       "      <td>145.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>22.0</td>\n",
       "      <td>72.8</td>\n",
       "      <td>49.5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>28.8</td>\n",
       "      <td>69.5</td>\n",
       "      <td>124.8</td>\n",
       "      <td>143.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>81.3</td>\n",
       "      <td>...</td>\n",
       "      <td>134.2</td>\n",
       "      <td>146.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>71.1</td>\n",
       "      <td>46.5</td>\n",
       "      <td>2.0</td>\n",
       "      <td>29.8</td>\n",
       "      <td>70.0</td>\n",
       "      <td>110.5</td>\n",
       "      <td>148.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>16.0</td>\n",
       "      <td>84.5</td>\n",
       "      <td>45.6</td>\n",
       "      <td>2.0</td>\n",
       "      <td>57.2</td>\n",
       "      <td>84.5</td>\n",
       "      <td>125.2</td>\n",
       "      <td>150.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>84.8</td>\n",
       "      <td>...</td>\n",
       "      <td>108.5</td>\n",
       "      <td>140.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>59.2</td>\n",
       "      <td>33.2</td>\n",
       "      <td>3.0</td>\n",
       "      <td>33.8</td>\n",
       "      <td>64.5</td>\n",
       "      <td>79.0</td>\n",
       "      <td>133.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>15.0</td>\n",
       "      <td>56.3</td>\n",
       "      <td>49.9</td>\n",
       "      <td>0.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>43.0</td>\n",
       "      <td>99.5</td>\n",
       "      <td>132.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>74.9</td>\n",
       "      <td>...</td>\n",
       "      <td>117.5</td>\n",
       "      <td>136.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>76.0</td>\n",
       "      <td>47.1</td>\n",
       "      <td>3.0</td>\n",
       "      <td>30.0</td>\n",
       "      <td>92.0</td>\n",
       "      <td>109.5</td>\n",
       "      <td>147.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>22.0</td>\n",
       "      <td>79.9</td>\n",
       "      <td>38.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>66.5</td>\n",
       "      <td>85.5</td>\n",
       "      <td>98.5</td>\n",
       "      <td>141.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>65.1</td>\n",
       "      <td>...</td>\n",
       "      <td>79.5</td>\n",
       "      <td>139.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>68.5</td>\n",
       "      <td>40.1</td>\n",
       "      <td>4.0</td>\n",
       "      <td>38.8</td>\n",
       "      <td>68.5</td>\n",
       "      <td>91.8</td>\n",
       "      <td>146.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>16 rows × 24 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          Python                                               Math         \n",
       "           count  mean   std   min   25%    50%    75%    max count  mean   \n",
       "sex class                                                                   \n",
       "女   1       16.0  78.1  36.9   5.0  57.5   64.5  112.0  133.0  16.0  89.6  \\\n",
       "    2       22.0  84.0  39.8   1.0  60.0   77.5  118.5  147.0  22.0  82.0   \n",
       "    3       18.0  62.4  41.4   2.0  34.2   64.5   83.2  148.0  18.0  62.6   \n",
       "    4       21.0  79.5  45.8   6.0  43.0   91.0  116.0  150.0  21.0  87.6   \n",
       "    5       19.0  73.4  44.9  10.0  34.0   69.0  113.5  139.0  19.0  85.7   \n",
       "    6       26.0  92.3  36.8  24.0  55.5   99.5  123.5  146.0  26.0  62.3   \n",
       "    7       18.0  81.6  45.9   1.0  43.8   93.5  118.8  141.0  18.0  68.4   \n",
       "    8       18.0  73.4  36.4   4.0  50.8   72.5   97.0  144.0  18.0  66.3   \n",
       "男   1       21.0  86.7  33.3  19.0  75.0   87.0  114.0  147.0  21.0  74.2   \n",
       "    2       14.0  91.8  55.4   0.0  38.5  119.0  139.2  146.0  14.0  53.7   \n",
       "    3       18.0  61.3  46.9   7.0  22.0   48.5   97.8  146.0  18.0  50.7   \n",
       "    4       14.0  79.1  42.8  13.0  56.8   61.0  105.5  150.0  14.0  74.8   \n",
       "    5       22.0  72.8  49.5   0.0  28.8   69.5  124.8  143.0  22.0  81.3   \n",
       "    6       16.0  84.5  45.6   2.0  57.2   84.5  125.2  150.0  16.0  84.8   \n",
       "    7       15.0  56.3  49.9   0.0  13.0   43.0   99.5  132.0  15.0  74.9   \n",
       "    8       22.0  79.9  38.0   2.0  66.5   85.5   98.5  141.0  22.0  65.1   \n",
       "\n",
       "           ...                  En                                         \n",
       "           ...    75%    max count  mean   std   min   25%    50%    75%   \n",
       "sex class  ...                                                             \n",
       "女   1      ...  121.2  150.0  16.0  84.0  47.5   0.0  48.2  101.0  122.8  \\\n",
       "    2      ...   99.8  150.0  22.0  70.5  46.0   1.0  33.8   60.5  108.8   \n",
       "    3      ...  104.8  138.0  18.0  69.8  43.8   5.0  39.2   60.5  107.0   \n",
       "    4      ...  130.0  149.0  21.0  63.6  48.4   3.0  16.0   52.0  114.0   \n",
       "    5      ...  115.5  149.0  19.0  88.6  41.6  33.0  50.5   72.0  132.5   \n",
       "    6      ...   84.8  146.0  26.0  68.6  44.7   1.0  28.8   77.0  105.8   \n",
       "    7      ...  116.8  143.0  18.0  62.8  44.7   1.0  30.8   47.5  106.5   \n",
       "    8      ...   90.0  146.0  18.0  74.4  41.7   9.0  45.2   63.0  111.8   \n",
       "男   1      ...  108.0  120.0  21.0  69.1  50.6   0.0  24.0   69.0  106.0   \n",
       "    2      ...   82.0  120.0  14.0  79.4  37.6   7.0  51.5   87.0  101.8   \n",
       "    3      ...   68.2  140.0  18.0  86.7  51.3   0.0  42.2  107.5  129.2   \n",
       "    4      ...  110.5  139.0  14.0  90.2  47.3   5.0  66.2   89.0  138.5   \n",
       "    5      ...  134.2  146.0  22.0  71.1  46.5   2.0  29.8   70.0  110.5   \n",
       "    6      ...  108.5  140.0  16.0  59.2  33.2   3.0  33.8   64.5   79.0   \n",
       "    7      ...  117.5  136.0  15.0  76.0  47.1   3.0  30.0   92.0  109.5   \n",
       "    8      ...   79.5  139.0  22.0  68.5  40.1   4.0  38.8   68.5   91.8   \n",
       "\n",
       "                  \n",
       "             max  \n",
       "sex class         \n",
       "女   1      143.0  \n",
       "    2      149.0  \n",
       "    3      134.0  \n",
       "    4      143.0  \n",
       "    5      148.0  \n",
       "    6      140.0  \n",
       "    7      133.0  \n",
       "    8      144.0  \n",
       "男   1      149.0  \n",
       "    2      144.0  \n",
       "    3      148.0  \n",
       "    4      145.0  \n",
       "    5      148.0  \n",
       "    6      133.0  \n",
       "    7      147.0  \n",
       "    8      146.0  \n",
       "\n",
       "[16 rows x 24 columns]"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby(['sex', 'class']).describe().round(1)  # 根据班级男女分组的一些信息"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分组聚合apply、transform"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-06T23:04:46.100416Z",
     "start_time": "2023-04-06T23:04:44.816384Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>sex</th>\n",
       "      <th>class</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"8\" valign=\"top\">女</th>\n",
       "      <th>1</th>\n",
       "      <td>78.1</td>\n",
       "      <td>84.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>84.0</td>\n",
       "      <td>70.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>62.4</td>\n",
       "      <td>69.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>79.5</td>\n",
       "      <td>63.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>73.4</td>\n",
       "      <td>88.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>92.3</td>\n",
       "      <td>68.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>81.6</td>\n",
       "      <td>62.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>73.4</td>\n",
       "      <td>74.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"8\" valign=\"top\">男</th>\n",
       "      <th>1</th>\n",
       "      <td>86.7</td>\n",
       "      <td>69.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>91.8</td>\n",
       "      <td>79.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>61.3</td>\n",
       "      <td>86.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>79.1</td>\n",
       "      <td>90.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>72.8</td>\n",
       "      <td>71.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>84.5</td>\n",
       "      <td>59.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>56.3</td>\n",
       "      <td>76.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>79.9</td>\n",
       "      <td>68.5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           Python    En\n",
       "sex class              \n",
       "女   1        78.1  84.0\n",
       "    2        84.0  70.5\n",
       "    3        62.4  69.8\n",
       "    4        79.5  63.6\n",
       "    5        73.4  88.6\n",
       "    6        92.3  68.6\n",
       "    7        81.6  62.8\n",
       "    8        73.4  74.4\n",
       "男   1        86.7  69.1\n",
       "    2        91.8  79.4\n",
       "    3        61.3  86.7\n",
       "    4        79.1  90.2\n",
       "    5        72.8  71.1\n",
       "    6        84.5  59.2\n",
       "    7        56.3  76.0\n",
       "    8        79.9  68.5"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby(['sex', 'class'])[['Python', 'En']].apply(\n",
    "    lambda x: x.mean()).round(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-06T23:04:46.100416Z",
     "start_time": "2023-04-06T23:04:44.867312Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>73.4</td>\n",
       "      <td>88.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>61.3</td>\n",
       "      <td>86.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>92.3</td>\n",
       "      <td>68.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>79.9</td>\n",
       "      <td>68.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>84.5</td>\n",
       "      <td>59.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>295</th>\n",
       "      <td>84.5</td>\n",
       "      <td>59.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>296</th>\n",
       "      <td>86.7</td>\n",
       "      <td>69.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>297</th>\n",
       "      <td>79.9</td>\n",
       "      <td>68.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>298</th>\n",
       "      <td>79.1</td>\n",
       "      <td>90.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>299</th>\n",
       "      <td>92.3</td>\n",
       "      <td>68.6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>300 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     Python    En\n",
       "0      73.4  88.6\n",
       "1      61.3  86.7\n",
       "2      92.3  68.6\n",
       "3      79.9  68.5\n",
       "4      84.5  59.2\n",
       "..      ...   ...\n",
       "295    84.5  59.2\n",
       "296    86.7  69.1\n",
       "297    79.9  68.5\n",
       "298    79.1  90.2\n",
       "299    92.3  68.6\n",
       "\n",
       "[300 rows x 2 columns]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def _mean(x):\n",
    "    return np.round(x.mean(), 1)\n",
    "\n",
    "\n",
    "df.groupby(['sex', 'class'])[['Python', 'En']].transform(_mean)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分组聚合agg"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-06T23:04:46.100416Z",
     "start_time": "2023-04-06T23:04:44.906483Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th colspan=\"3\" halign=\"left\">Python</th>\n",
       "      <th colspan=\"3\" halign=\"left\">Math</th>\n",
       "      <th colspan=\"3\" halign=\"left\">En</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>mean</th>\n",
       "      <th>amax</th>\n",
       "      <th>amin</th>\n",
       "      <th>mean</th>\n",
       "      <th>amax</th>\n",
       "      <th>amin</th>\n",
       "      <th>mean</th>\n",
       "      <th>amax</th>\n",
       "      <th>amin</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>sex</th>\n",
       "      <th>class</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"8\" valign=\"top\">女</th>\n",
       "      <th>1</th>\n",
       "      <td>78.0</td>\n",
       "      <td>133</td>\n",
       "      <td>5</td>\n",
       "      <td>90.0</td>\n",
       "      <td>150</td>\n",
       "      <td>28</td>\n",
       "      <td>84.0</td>\n",
       "      <td>143</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>84.0</td>\n",
       "      <td>147</td>\n",
       "      <td>1</td>\n",
       "      <td>82.0</td>\n",
       "      <td>150</td>\n",
       "      <td>22</td>\n",
       "      <td>71.0</td>\n",
       "      <td>149</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>62.0</td>\n",
       "      <td>148</td>\n",
       "      <td>2</td>\n",
       "      <td>63.0</td>\n",
       "      <td>138</td>\n",
       "      <td>6</td>\n",
       "      <td>70.0</td>\n",
       "      <td>134</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>80.0</td>\n",
       "      <td>150</td>\n",
       "      <td>6</td>\n",
       "      <td>88.0</td>\n",
       "      <td>149</td>\n",
       "      <td>5</td>\n",
       "      <td>64.0</td>\n",
       "      <td>143</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>73.0</td>\n",
       "      <td>139</td>\n",
       "      <td>10</td>\n",
       "      <td>86.0</td>\n",
       "      <td>149</td>\n",
       "      <td>8</td>\n",
       "      <td>89.0</td>\n",
       "      <td>148</td>\n",
       "      <td>33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>92.0</td>\n",
       "      <td>146</td>\n",
       "      <td>24</td>\n",
       "      <td>62.0</td>\n",
       "      <td>146</td>\n",
       "      <td>8</td>\n",
       "      <td>69.0</td>\n",
       "      <td>140</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>82.0</td>\n",
       "      <td>141</td>\n",
       "      <td>1</td>\n",
       "      <td>68.0</td>\n",
       "      <td>143</td>\n",
       "      <td>1</td>\n",
       "      <td>63.0</td>\n",
       "      <td>133</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>73.0</td>\n",
       "      <td>144</td>\n",
       "      <td>4</td>\n",
       "      <td>66.0</td>\n",
       "      <td>146</td>\n",
       "      <td>2</td>\n",
       "      <td>74.0</td>\n",
       "      <td>144</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"8\" valign=\"top\">男</th>\n",
       "      <th>1</th>\n",
       "      <td>87.0</td>\n",
       "      <td>147</td>\n",
       "      <td>19</td>\n",
       "      <td>74.0</td>\n",
       "      <td>120</td>\n",
       "      <td>6</td>\n",
       "      <td>69.0</td>\n",
       "      <td>149</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>92.0</td>\n",
       "      <td>146</td>\n",
       "      <td>0</td>\n",
       "      <td>54.0</td>\n",
       "      <td>120</td>\n",
       "      <td>16</td>\n",
       "      <td>79.0</td>\n",
       "      <td>144</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>61.0</td>\n",
       "      <td>146</td>\n",
       "      <td>7</td>\n",
       "      <td>51.0</td>\n",
       "      <td>140</td>\n",
       "      <td>4</td>\n",
       "      <td>87.0</td>\n",
       "      <td>148</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>79.0</td>\n",
       "      <td>150</td>\n",
       "      <td>13</td>\n",
       "      <td>75.0</td>\n",
       "      <td>139</td>\n",
       "      <td>6</td>\n",
       "      <td>90.0</td>\n",
       "      <td>145</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>73.0</td>\n",
       "      <td>143</td>\n",
       "      <td>0</td>\n",
       "      <td>81.0</td>\n",
       "      <td>146</td>\n",
       "      <td>1</td>\n",
       "      <td>71.0</td>\n",
       "      <td>148</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>84.0</td>\n",
       "      <td>150</td>\n",
       "      <td>2</td>\n",
       "      <td>85.0</td>\n",
       "      <td>140</td>\n",
       "      <td>1</td>\n",
       "      <td>59.0</td>\n",
       "      <td>133</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>56.0</td>\n",
       "      <td>132</td>\n",
       "      <td>0</td>\n",
       "      <td>75.0</td>\n",
       "      <td>136</td>\n",
       "      <td>4</td>\n",
       "      <td>76.0</td>\n",
       "      <td>147</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>80.0</td>\n",
       "      <td>141</td>\n",
       "      <td>2</td>\n",
       "      <td>65.0</td>\n",
       "      <td>139</td>\n",
       "      <td>3</td>\n",
       "      <td>69.0</td>\n",
       "      <td>146</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          Python            Math              En          \n",
       "            mean amax amin  mean amax amin  mean amax amin\n",
       "sex class                                                 \n",
       "女   1       78.0  133    5  90.0  150   28  84.0  143    0\n",
       "    2       84.0  147    1  82.0  150   22  71.0  149    1\n",
       "    3       62.0  148    2  63.0  138    6  70.0  134    5\n",
       "    4       80.0  150    6  88.0  149    5  64.0  143    3\n",
       "    5       73.0  139   10  86.0  149    8  89.0  148   33\n",
       "    6       92.0  146   24  62.0  146    8  69.0  140    1\n",
       "    7       82.0  141    1  68.0  143    1  63.0  133    1\n",
       "    8       73.0  144    4  66.0  146    2  74.0  144    9\n",
       "男   1       87.0  147   19  74.0  120    6  69.0  149    0\n",
       "    2       92.0  146    0  54.0  120   16  79.0  144    7\n",
       "    3       61.0  146    7  51.0  140    4  87.0  148    0\n",
       "    4       79.0  150   13  75.0  139    6  90.0  145    5\n",
       "    5       73.0  143    0  81.0  146    1  71.0  148    2\n",
       "    6       84.0  150    2  85.0  140    1  59.0  133    3\n",
       "    7       56.0  132    0  75.0  136    4  76.0  147    3\n",
       "    8       80.0  141    2  65.0  139    3  69.0  146    4"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby(['sex', 'class']).agg([np.mean, np.max, np.min]).round()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-06T23:04:46.101416Z",
     "start_time": "2023-04-06T23:04:44.953471Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th colspan=\"3\" halign=\"left\">Python</th>\n",
       "      <th colspan=\"3\" halign=\"left\">Math</th>\n",
       "      <th colspan=\"3\" halign=\"left\">En</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>平均值</th>\n",
       "      <th>最大值</th>\n",
       "      <th>最小值</th>\n",
       "      <th>平均值</th>\n",
       "      <th>最大值</th>\n",
       "      <th>最小值</th>\n",
       "      <th>平均值</th>\n",
       "      <th>最大值</th>\n",
       "      <th>最小值</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>sex</th>\n",
       "      <th>class</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"8\" valign=\"top\">女</th>\n",
       "      <th>1</th>\n",
       "      <td>78.1</td>\n",
       "      <td>133</td>\n",
       "      <td>5</td>\n",
       "      <td>89.6</td>\n",
       "      <td>150</td>\n",
       "      <td>28</td>\n",
       "      <td>84.0</td>\n",
       "      <td>143</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>84.0</td>\n",
       "      <td>147</td>\n",
       "      <td>1</td>\n",
       "      <td>82.0</td>\n",
       "      <td>150</td>\n",
       "      <td>22</td>\n",
       "      <td>70.5</td>\n",
       "      <td>149</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>62.4</td>\n",
       "      <td>148</td>\n",
       "      <td>2</td>\n",
       "      <td>62.6</td>\n",
       "      <td>138</td>\n",
       "      <td>6</td>\n",
       "      <td>69.8</td>\n",
       "      <td>134</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>79.5</td>\n",
       "      <td>150</td>\n",
       "      <td>6</td>\n",
       "      <td>87.6</td>\n",
       "      <td>149</td>\n",
       "      <td>5</td>\n",
       "      <td>63.6</td>\n",
       "      <td>143</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>73.4</td>\n",
       "      <td>139</td>\n",
       "      <td>10</td>\n",
       "      <td>85.7</td>\n",
       "      <td>149</td>\n",
       "      <td>8</td>\n",
       "      <td>88.6</td>\n",
       "      <td>148</td>\n",
       "      <td>33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>92.3</td>\n",
       "      <td>146</td>\n",
       "      <td>24</td>\n",
       "      <td>62.3</td>\n",
       "      <td>146</td>\n",
       "      <td>8</td>\n",
       "      <td>68.6</td>\n",
       "      <td>140</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>81.6</td>\n",
       "      <td>141</td>\n",
       "      <td>1</td>\n",
       "      <td>68.4</td>\n",
       "      <td>143</td>\n",
       "      <td>1</td>\n",
       "      <td>62.8</td>\n",
       "      <td>133</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>73.4</td>\n",
       "      <td>144</td>\n",
       "      <td>4</td>\n",
       "      <td>66.3</td>\n",
       "      <td>146</td>\n",
       "      <td>2</td>\n",
       "      <td>74.4</td>\n",
       "      <td>144</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"8\" valign=\"top\">男</th>\n",
       "      <th>1</th>\n",
       "      <td>86.7</td>\n",
       "      <td>147</td>\n",
       "      <td>19</td>\n",
       "      <td>74.2</td>\n",
       "      <td>120</td>\n",
       "      <td>6</td>\n",
       "      <td>69.1</td>\n",
       "      <td>149</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>91.8</td>\n",
       "      <td>146</td>\n",
       "      <td>0</td>\n",
       "      <td>53.7</td>\n",
       "      <td>120</td>\n",
       "      <td>16</td>\n",
       "      <td>79.4</td>\n",
       "      <td>144</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>61.3</td>\n",
       "      <td>146</td>\n",
       "      <td>7</td>\n",
       "      <td>50.7</td>\n",
       "      <td>140</td>\n",
       "      <td>4</td>\n",
       "      <td>86.7</td>\n",
       "      <td>148</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>79.1</td>\n",
       "      <td>150</td>\n",
       "      <td>13</td>\n",
       "      <td>74.8</td>\n",
       "      <td>139</td>\n",
       "      <td>6</td>\n",
       "      <td>90.2</td>\n",
       "      <td>145</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>72.8</td>\n",
       "      <td>143</td>\n",
       "      <td>0</td>\n",
       "      <td>81.3</td>\n",
       "      <td>146</td>\n",
       "      <td>1</td>\n",
       "      <td>71.1</td>\n",
       "      <td>148</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>84.5</td>\n",
       "      <td>150</td>\n",
       "      <td>2</td>\n",
       "      <td>84.8</td>\n",
       "      <td>140</td>\n",
       "      <td>1</td>\n",
       "      <td>59.2</td>\n",
       "      <td>133</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>56.3</td>\n",
       "      <td>132</td>\n",
       "      <td>0</td>\n",
       "      <td>74.9</td>\n",
       "      <td>136</td>\n",
       "      <td>4</td>\n",
       "      <td>76.0</td>\n",
       "      <td>147</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>79.9</td>\n",
       "      <td>141</td>\n",
       "      <td>2</td>\n",
       "      <td>65.1</td>\n",
       "      <td>139</td>\n",
       "      <td>3</td>\n",
       "      <td>68.5</td>\n",
       "      <td>146</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          Python           Math             En         \n",
       "             平均值  最大值 最小值   平均值  最大值 最小值   平均值  最大值 最小值\n",
       "sex class                                              \n",
       "女   1       78.1  133   5  89.6  150  28  84.0  143   0\n",
       "    2       84.0  147   1  82.0  150  22  70.5  149   1\n",
       "    3       62.4  148   2  62.6  138   6  69.8  134   5\n",
       "    4       79.5  150   6  87.6  149   5  63.6  143   3\n",
       "    5       73.4  139  10  85.7  149   8  88.6  148  33\n",
       "    6       92.3  146  24  62.3  146   8  68.6  140   1\n",
       "    7       81.6  141   1  68.4  143   1  62.8  133   1\n",
       "    8       73.4  144   4  66.3  146   2  74.4  144   9\n",
       "男   1       86.7  147  19  74.2  120   6  69.1  149   0\n",
       "    2       91.8  146   0  53.7  120  16  79.4  144   7\n",
       "    3       61.3  146   7  50.7  140   4  86.7  148   0\n",
       "    4       79.1  150  13  74.8  139   6  90.2  145   5\n",
       "    5       72.8  143   0  81.3  146   1  71.1  148   2\n",
       "    6       84.5  150   2  84.8  140   1  59.2  133   3\n",
       "    7       56.3  132   0  74.9  136   4  76.0  147   3\n",
       "    8       79.9  141   2  65.1  139   3  68.5  146   4"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby(['sex', 'class']).agg(\n",
    "    [('平均值', np.mean), ('最大值', np.max), ('最小值', np.min)]).round(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-06T23:04:46.102383Z",
     "start_time": "2023-04-06T23:04:44.998120Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th>Math</th>\n",
       "      <th>En</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>sex</th>\n",
       "      <th>class</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"8\" valign=\"top\">女</th>\n",
       "      <th>1</th>\n",
       "      <td>133</td>\n",
       "      <td>28</td>\n",
       "      <td>84.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>147</td>\n",
       "      <td>22</td>\n",
       "      <td>70.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>148</td>\n",
       "      <td>6</td>\n",
       "      <td>69.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>150</td>\n",
       "      <td>5</td>\n",
       "      <td>63.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>139</td>\n",
       "      <td>8</td>\n",
       "      <td>88.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>146</td>\n",
       "      <td>8</td>\n",
       "      <td>68.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>141</td>\n",
       "      <td>1</td>\n",
       "      <td>62.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>144</td>\n",
       "      <td>2</td>\n",
       "      <td>74.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"8\" valign=\"top\">男</th>\n",
       "      <th>1</th>\n",
       "      <td>147</td>\n",
       "      <td>6</td>\n",
       "      <td>69.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>146</td>\n",
       "      <td>16</td>\n",
       "      <td>79.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>146</td>\n",
       "      <td>4</td>\n",
       "      <td>86.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>150</td>\n",
       "      <td>6</td>\n",
       "      <td>90.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>143</td>\n",
       "      <td>1</td>\n",
       "      <td>71.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>150</td>\n",
       "      <td>1</td>\n",
       "      <td>59.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>132</td>\n",
       "      <td>4</td>\n",
       "      <td>76.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>141</td>\n",
       "      <td>3</td>\n",
       "      <td>68.5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           Python  Math    En\n",
       "sex class                    \n",
       "女   1         133    28  84.0\n",
       "    2         147    22  70.5\n",
       "    3         148     6  69.8\n",
       "    4         150     5  63.6\n",
       "    5         139     8  88.6\n",
       "    6         146     8  68.6\n",
       "    7         141     1  62.8\n",
       "    8         144     2  74.4\n",
       "男   1         147     6  69.1\n",
       "    2         146    16  79.4\n",
       "    3         146     4  86.7\n",
       "    4         150     6  90.2\n",
       "    5         143     1  71.1\n",
       "    6         150     1  59.2\n",
       "    7         132     4  76.0\n",
       "    8         141     3  68.5"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 三列执行不同的运算\n",
    "df.groupby(['sex', 'class']).agg(\n",
    "    {'Python': np.max, 'Math': np.min, 'En': np.mean}).round(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 透视表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-06T23:04:46.103369Z",
     "start_time": "2023-04-06T23:04:45.028040Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>En</th>\n",
       "      <th>Python</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>sex</th>\n",
       "      <th>class</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"8\" valign=\"top\">女</th>\n",
       "      <th>1</th>\n",
       "      <td>84.0</td>\n",
       "      <td>78.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>70.5</td>\n",
       "      <td>84.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>69.8</td>\n",
       "      <td>62.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>63.6</td>\n",
       "      <td>79.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>88.6</td>\n",
       "      <td>73.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>68.6</td>\n",
       "      <td>92.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>62.8</td>\n",
       "      <td>81.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>74.4</td>\n",
       "      <td>73.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"8\" valign=\"top\">男</th>\n",
       "      <th>1</th>\n",
       "      <td>69.1</td>\n",
       "      <td>86.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>79.4</td>\n",
       "      <td>91.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>86.7</td>\n",
       "      <td>61.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>90.2</td>\n",
       "      <td>79.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>71.1</td>\n",
       "      <td>72.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>59.2</td>\n",
       "      <td>84.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>76.0</td>\n",
       "      <td>56.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>68.5</td>\n",
       "      <td>79.9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             En  Python\n",
       "sex class              \n",
       "女   1      84.0    78.1\n",
       "    2      70.5    84.0\n",
       "    3      69.8    62.4\n",
       "    4      63.6    79.5\n",
       "    5      88.6    73.4\n",
       "    6      68.6    92.3\n",
       "    7      62.8    81.6\n",
       "    8      74.4    73.4\n",
       "男   1      69.1    86.7\n",
       "    2      79.4    91.8\n",
       "    3      86.7    61.3\n",
       "    4      90.2    79.1\n",
       "    5      71.1    72.8\n",
       "    6      59.2    84.5\n",
       "    7      76.0    56.3\n",
       "    8      68.5    79.9"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.pivot_table(values=['Python', 'En'], index=['sex', 'class'], aggfunc='mean').round(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-06T23:04:46.104366Z",
     "start_time": "2023-04-06T23:04:45.055965Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th colspan=\"3\" halign=\"left\">En</th>\n",
       "      <th colspan=\"2\" halign=\"left\">Math</th>\n",
       "      <th>Python</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>方差</th>\n",
       "      <th>标准差</th>\n",
       "      <th>计数</th>\n",
       "      <th>最大值</th>\n",
       "      <th>最小值</th>\n",
       "      <th>平均值</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>sex</th>\n",
       "      <th>class</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"8\" valign=\"top\">女</th>\n",
       "      <th>1</th>\n",
       "      <td>2260.1</td>\n",
       "      <td>47.5</td>\n",
       "      <td>16</td>\n",
       "      <td>150</td>\n",
       "      <td>28</td>\n",
       "      <td>78.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2120.5</td>\n",
       "      <td>46.0</td>\n",
       "      <td>22</td>\n",
       "      <td>150</td>\n",
       "      <td>22</td>\n",
       "      <td>84.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1915.8</td>\n",
       "      <td>43.8</td>\n",
       "      <td>18</td>\n",
       "      <td>138</td>\n",
       "      <td>6</td>\n",
       "      <td>62.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2346.0</td>\n",
       "      <td>48.4</td>\n",
       "      <td>21</td>\n",
       "      <td>149</td>\n",
       "      <td>5</td>\n",
       "      <td>79.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1732.2</td>\n",
       "      <td>41.6</td>\n",
       "      <td>19</td>\n",
       "      <td>149</td>\n",
       "      <td>8</td>\n",
       "      <td>73.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>1998.3</td>\n",
       "      <td>44.7</td>\n",
       "      <td>26</td>\n",
       "      <td>146</td>\n",
       "      <td>8</td>\n",
       "      <td>92.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>1998.6</td>\n",
       "      <td>44.7</td>\n",
       "      <td>18</td>\n",
       "      <td>143</td>\n",
       "      <td>1</td>\n",
       "      <td>81.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>1742.6</td>\n",
       "      <td>41.7</td>\n",
       "      <td>18</td>\n",
       "      <td>146</td>\n",
       "      <td>2</td>\n",
       "      <td>73.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"8\" valign=\"top\">男</th>\n",
       "      <th>1</th>\n",
       "      <td>2561.7</td>\n",
       "      <td>50.6</td>\n",
       "      <td>21</td>\n",
       "      <td>120</td>\n",
       "      <td>6</td>\n",
       "      <td>86.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1415.3</td>\n",
       "      <td>37.6</td>\n",
       "      <td>14</td>\n",
       "      <td>120</td>\n",
       "      <td>16</td>\n",
       "      <td>91.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2635.1</td>\n",
       "      <td>51.3</td>\n",
       "      <td>18</td>\n",
       "      <td>140</td>\n",
       "      <td>4</td>\n",
       "      <td>61.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2236.6</td>\n",
       "      <td>47.3</td>\n",
       "      <td>14</td>\n",
       "      <td>139</td>\n",
       "      <td>6</td>\n",
       "      <td>79.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2161.2</td>\n",
       "      <td>46.5</td>\n",
       "      <td>22</td>\n",
       "      <td>146</td>\n",
       "      <td>1</td>\n",
       "      <td>72.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>1099.5</td>\n",
       "      <td>33.2</td>\n",
       "      <td>16</td>\n",
       "      <td>140</td>\n",
       "      <td>1</td>\n",
       "      <td>84.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2222.4</td>\n",
       "      <td>47.1</td>\n",
       "      <td>15</td>\n",
       "      <td>136</td>\n",
       "      <td>4</td>\n",
       "      <td>56.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>1605.1</td>\n",
       "      <td>40.1</td>\n",
       "      <td>22</td>\n",
       "      <td>139</td>\n",
       "      <td>3</td>\n",
       "      <td>79.9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               En           Math     Python\n",
       "               方差   标准差  计数  最大值 最小值    平均值\n",
       "sex class                                  \n",
       "女   1      2260.1  47.5  16  150  28   78.1\n",
       "    2      2120.5  46.0  22  150  22   84.0\n",
       "    3      1915.8  43.8  18  138   6   62.4\n",
       "    4      2346.0  48.4  21  149   5   79.5\n",
       "    5      1732.2  41.6  19  149   8   73.4\n",
       "    6      1998.3  44.7  26  146   8   92.3\n",
       "    7      1998.6  44.7  18  143   1   81.6\n",
       "    8      1742.6  41.7  18  146   2   73.4\n",
       "男   1      2561.7  50.6  21  120   6   86.7\n",
       "    2      1415.3  37.6  14  120  16   91.8\n",
       "    3      2635.1  51.3  18  140   4   61.3\n",
       "    4      2236.6  47.3  14  139   6   79.1\n",
       "    5      2161.2  46.5  22  146   1   72.8\n",
       "    6      1099.5  33.2  16  140   1   84.5\n",
       "    7      2222.4  47.1  15  136   4   56.3\n",
       "    8      1605.1  40.1  22  139   3   79.9"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.pivot_table(values=['Python', 'Math', 'En'],  # 值\n",
    "               index=['sex', 'class'],  # 索引\n",
    "               aggfunc={'Python': [('平均值', np.mean)],\n",
    "                        'Math': [('最小值', np.min), ('最大值', np.max)],\n",
    "                        'En': [('标准差', np.std), ('方差', np.var), ('计数', np.size)]\n",
    "                        }).round(1)  # 计算方法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-06T23:04:46.104366Z",
     "start_time": "2023-04-06T23:04:45.123298Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe thead tr:last-of-type th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>Python</th>\n",
       "      <th colspan=\"2\" halign=\"left\">Math</th>\n",
       "      <th colspan=\"3\" halign=\"left\">En</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>平均值</th>\n",
       "      <th>最小值</th>\n",
       "      <th>最大值</th>\n",
       "      <th>标准差</th>\n",
       "      <th>方差</th>\n",
       "      <th>计数</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>sex</th>\n",
       "      <th>class</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"8\" valign=\"top\">女</th>\n",
       "      <th>1</th>\n",
       "      <td>78.1</td>\n",
       "      <td>28</td>\n",
       "      <td>150</td>\n",
       "      <td>47.5</td>\n",
       "      <td>2260.1</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>84.0</td>\n",
       "      <td>22</td>\n",
       "      <td>150</td>\n",
       "      <td>46.0</td>\n",
       "      <td>2120.5</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>62.4</td>\n",
       "      <td>6</td>\n",
       "      <td>138</td>\n",
       "      <td>43.8</td>\n",
       "      <td>1915.8</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>79.5</td>\n",
       "      <td>5</td>\n",
       "      <td>149</td>\n",
       "      <td>48.4</td>\n",
       "      <td>2346.0</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>73.4</td>\n",
       "      <td>8</td>\n",
       "      <td>149</td>\n",
       "      <td>41.6</td>\n",
       "      <td>1732.2</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>92.3</td>\n",
       "      <td>8</td>\n",
       "      <td>146</td>\n",
       "      <td>44.7</td>\n",
       "      <td>1998.3</td>\n",
       "      <td>26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>81.6</td>\n",
       "      <td>1</td>\n",
       "      <td>143</td>\n",
       "      <td>44.7</td>\n",
       "      <td>1998.6</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>73.4</td>\n",
       "      <td>2</td>\n",
       "      <td>146</td>\n",
       "      <td>41.7</td>\n",
       "      <td>1742.6</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"8\" valign=\"top\">男</th>\n",
       "      <th>1</th>\n",
       "      <td>86.7</td>\n",
       "      <td>6</td>\n",
       "      <td>120</td>\n",
       "      <td>50.6</td>\n",
       "      <td>2561.7</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>91.8</td>\n",
       "      <td>16</td>\n",
       "      <td>120</td>\n",
       "      <td>37.6</td>\n",
       "      <td>1415.3</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>61.3</td>\n",
       "      <td>4</td>\n",
       "      <td>140</td>\n",
       "      <td>51.3</td>\n",
       "      <td>2635.1</td>\n",
       "      <td>18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>79.1</td>\n",
       "      <td>6</td>\n",
       "      <td>139</td>\n",
       "      <td>47.3</td>\n",
       "      <td>2236.6</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>72.8</td>\n",
       "      <td>1</td>\n",
       "      <td>146</td>\n",
       "      <td>46.5</td>\n",
       "      <td>2161.2</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>84.5</td>\n",
       "      <td>1</td>\n",
       "      <td>140</td>\n",
       "      <td>33.2</td>\n",
       "      <td>1099.5</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>56.3</td>\n",
       "      <td>4</td>\n",
       "      <td>136</td>\n",
       "      <td>47.1</td>\n",
       "      <td>2222.4</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>79.9</td>\n",
       "      <td>3</td>\n",
       "      <td>139</td>\n",
       "      <td>40.1</td>\n",
       "      <td>1605.1</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          Python Math         En            \n",
       "             平均值  最小值  最大值   标准差      方差  计数\n",
       "sex class                                   \n",
       "女   1       78.1   28  150  47.5  2260.1  16\n",
       "    2       84.0   22  150  46.0  2120.5  22\n",
       "    3       62.4    6  138  43.8  1915.8  18\n",
       "    4       79.5    5  149  48.4  2346.0  21\n",
       "    5       73.4    8  149  41.6  1732.2  19\n",
       "    6       92.3    8  146  44.7  1998.3  26\n",
       "    7       81.6    1  143  44.7  1998.6  18\n",
       "    8       73.4    2  146  41.7  1742.6  18\n",
       "男   1       86.7    6  120  50.6  2561.7  21\n",
       "    2       91.8   16  120  37.6  1415.3  14\n",
       "    3       61.3    4  140  51.3  2635.1  18\n",
       "    4       79.1    6  139  47.3  2236.6  14\n",
       "    5       72.8    1  146  46.5  2161.2  22\n",
       "    6       84.5    1  140  33.2  1099.5  16\n",
       "    7       56.3    4  136  47.1  2222.4  15\n",
       "    8       79.9    3  139  40.1  1605.1  22"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby(['sex', 'class']).agg(\n",
    "    {'Python': [('平均值', np.mean)],\n",
    "     'Math': [('最小值', np.min), ('最大值', np.max)],\n",
    "     'En': [('标准差', np.std), ('方差', np.var), ('计数', np.size)]\n",
    "     }\n",
    ").round(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 时间序列"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 时间戳处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-06T23:04:46.105363Z",
     "start_time": "2023-04-06T23:04:45.168722Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timestamp('2023-04-06 20:00:00')"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.Timestamp('2023.04.06 20')  # 具体时间点"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-06T23:04:46.105363Z",
     "start_time": "2023-04-06T23:04:45.184679Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Period('2023-04', 'M')"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.Period('2023.04.06', freq='M')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-06T23:04:46.106400Z",
     "start_time": "2023-04-06T23:04:45.197645Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2023-04-06', '2023-04-07', '2023-04-08', '2023-04-09',\n",
       "               '2023-04-10', '2023-04-11', '2023-04-12', '2023-04-13',\n",
       "               '2023-04-14', '2023-04-15'],\n",
       "              dtype='datetime64[ns]', freq='D')"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "index = pd.date_range('2023.04.06',freq='D',periods=10)\n",
    "index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2023-04-06T23:04:46.106400Z",
     "start_time": "2023-04-06T23:04:45.210610Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "PeriodIndex(['2023-04-06', '2023-04-07', '2023-04-08', '2023-04-09',\n",
       "             '2023-04-10', '2023-04-11', '2023-04-12', '2023-04-13',\n",
       "             '2023-04-14', '2023-04-15'],\n",
       "            dtype='period[D]')"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.period_range('2023.04.06',periods=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2023-04-06    7\n",
       "2023-04-07    3\n",
       "2023-04-08    1\n",
       "2023-04-09    3\n",
       "2023-04-10    7\n",
       "2023-04-11    4\n",
       "2023-04-12    3\n",
       "2023-04-13    6\n",
       "2023-04-14    2\n",
       "2023-04-15    1\n",
       "Freq: D, dtype: int32"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = pd.Series(np.random.randint(0, 10, size=10), index=index)\n",
    "ts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "ename": "ValueError",
     "evalue": "time data \"2020/09/17\" doesn't match format \"%Y.%m.%d\", at position 1. You might want to try:\n    - passing `format` if your strings have a consistent format;\n    - passing `format='ISO8601'` if your strings are all ISO8601 but not necessarily in exactly the same format;\n    - passing `format='mixed'`, and the format will be inferred for each element individually. You might want to use `dayfirst` alongside this.",
     "output_type": "error",
     "traceback": [
      "\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
      "\u001B[1;31mValueError\u001B[0m                                Traceback (most recent call last)",
      "Cell \u001B[1;32mIn[31], line 1\u001B[0m\n\u001B[1;32m----> 1\u001B[0m pd\u001B[39m.\u001B[39;49mto_datetime([\u001B[39m'\u001B[39;49m\u001B[39m2020.09.15\u001B[39;49m\u001B[39m'\u001B[39;49m,\u001B[39m'\u001B[39;49m\u001B[39m2020/09/17\u001B[39;49m\u001B[39m'\u001B[39;49m,\u001B[39m'\u001B[39;49m\u001B[39m18/09/2020\u001B[39;49m\u001B[39m'\u001B[39;49m])\n",
      "File \u001B[1;32m~\\AppData\\Roaming\\Python\\Python310\\site-packages\\pandas\\core\\tools\\datetimes.py:1082\u001B[0m, in \u001B[0;36mto_datetime\u001B[1;34m(arg, errors, dayfirst, yearfirst, utc, format, exact, unit, infer_datetime_format, origin, cache)\u001B[0m\n\u001B[0;32m   1080\u001B[0m         result \u001B[39m=\u001B[39m _convert_and_box_cache(argc, cache_array)\n\u001B[0;32m   1081\u001B[0m     \u001B[39melse\u001B[39;00m:\n\u001B[1;32m-> 1082\u001B[0m         result \u001B[39m=\u001B[39m convert_listlike(argc, \u001B[39mformat\u001B[39;49m)\n\u001B[0;32m   1083\u001B[0m \u001B[39melse\u001B[39;00m:\n\u001B[0;32m   1084\u001B[0m     result \u001B[39m=\u001B[39m convert_listlike(np\u001B[39m.\u001B[39marray([arg]), \u001B[39mformat\u001B[39m)[\u001B[39m0\u001B[39m]\n",
      "File \u001B[1;32m~\\AppData\\Roaming\\Python\\Python310\\site-packages\\pandas\\core\\tools\\datetimes.py:453\u001B[0m, in \u001B[0;36m_convert_listlike_datetimes\u001B[1;34m(arg, format, name, utc, unit, errors, dayfirst, yearfirst, exact)\u001B[0m\n\u001B[0;32m    451\u001B[0m \u001B[39m# `format` could be inferred, or user didn't ask for mixed-format parsing.\u001B[39;00m\n\u001B[0;32m    452\u001B[0m \u001B[39mif\u001B[39;00m \u001B[39mformat\u001B[39m \u001B[39mis\u001B[39;00m \u001B[39mnot\u001B[39;00m \u001B[39mNone\u001B[39;00m \u001B[39mand\u001B[39;00m \u001B[39mformat\u001B[39m \u001B[39m!=\u001B[39m \u001B[39m\"\u001B[39m\u001B[39mmixed\u001B[39m\u001B[39m\"\u001B[39m:\n\u001B[1;32m--> 453\u001B[0m     \u001B[39mreturn\u001B[39;00m _array_strptime_with_fallback(arg, name, utc, \u001B[39mformat\u001B[39;49m, exact, errors)\n\u001B[0;32m    455\u001B[0m result, tz_parsed \u001B[39m=\u001B[39m objects_to_datetime64ns(\n\u001B[0;32m    456\u001B[0m     arg,\n\u001B[0;32m    457\u001B[0m     dayfirst\u001B[39m=\u001B[39mdayfirst,\n\u001B[1;32m   (...)\u001B[0m\n\u001B[0;32m    461\u001B[0m     allow_object\u001B[39m=\u001B[39m\u001B[39mTrue\u001B[39;00m,\n\u001B[0;32m    462\u001B[0m )\n\u001B[0;32m    464\u001B[0m \u001B[39mif\u001B[39;00m tz_parsed \u001B[39mis\u001B[39;00m \u001B[39mnot\u001B[39;00m \u001B[39mNone\u001B[39;00m:\n\u001B[0;32m    465\u001B[0m     \u001B[39m# We can take a shortcut since the datetime64 numpy array\u001B[39;00m\n\u001B[0;32m    466\u001B[0m     \u001B[39m# is in UTC\u001B[39;00m\n",
      "File \u001B[1;32m~\\AppData\\Roaming\\Python\\Python310\\site-packages\\pandas\\core\\tools\\datetimes.py:484\u001B[0m, in \u001B[0;36m_array_strptime_with_fallback\u001B[1;34m(arg, name, utc, fmt, exact, errors)\u001B[0m\n\u001B[0;32m    473\u001B[0m \u001B[39mdef\u001B[39;00m \u001B[39m_array_strptime_with_fallback\u001B[39m(\n\u001B[0;32m    474\u001B[0m     arg,\n\u001B[0;32m    475\u001B[0m     name,\n\u001B[1;32m   (...)\u001B[0m\n\u001B[0;32m    479\u001B[0m     errors: \u001B[39mstr\u001B[39m,\n\u001B[0;32m    480\u001B[0m ) \u001B[39m-\u001B[39m\u001B[39m>\u001B[39m Index:\n\u001B[0;32m    481\u001B[0m \u001B[39m    \u001B[39m\u001B[39m\"\"\"\u001B[39;00m\n\u001B[0;32m    482\u001B[0m \u001B[39m    Call array_strptime, with fallback behavior depending on 'errors'.\u001B[39;00m\n\u001B[0;32m    483\u001B[0m \u001B[39m    \"\"\"\u001B[39;00m\n\u001B[1;32m--> 484\u001B[0m     result, timezones \u001B[39m=\u001B[39m array_strptime(arg, fmt, exact\u001B[39m=\u001B[39;49mexact, errors\u001B[39m=\u001B[39;49merrors, utc\u001B[39m=\u001B[39;49mutc)\n\u001B[0;32m    485\u001B[0m     \u001B[39mif\u001B[39;00m \u001B[39many\u001B[39m(tz \u001B[39mis\u001B[39;00m \u001B[39mnot\u001B[39;00m \u001B[39mNone\u001B[39;00m \u001B[39mfor\u001B[39;00m tz \u001B[39min\u001B[39;00m timezones):\n\u001B[0;32m    486\u001B[0m         \u001B[39mreturn\u001B[39;00m _return_parsed_timezone_results(result, timezones, utc, name)\n",
      "File \u001B[1;32m~\\AppData\\Roaming\\Python\\Python310\\site-packages\\pandas\\_libs\\tslibs\\strptime.pyx:530\u001B[0m, in \u001B[0;36mpandas._libs.tslibs.strptime.array_strptime\u001B[1;34m()\u001B[0m\n",
      "File \u001B[1;32m~\\AppData\\Roaming\\Python\\Python310\\site-packages\\pandas\\_libs\\tslibs\\strptime.pyx:351\u001B[0m, in \u001B[0;36mpandas._libs.tslibs.strptime.array_strptime\u001B[1;34m()\u001B[0m\n",
      "\u001B[1;31mValueError\u001B[0m: time data \"2020/09/17\" doesn't match format \"%Y.%m.%d\", at position 1. You might want to try:\n    - passing `format` if your strings have a consistent format;\n    - passing `format='ISO8601'` if your strings are all ISO8601 but not necessarily in exactly the same format;\n    - passing `format='mixed'`, and the format will be inferred for each element individually. You might want to use `dayfirst` alongside this."
     ]
    }
   ],
   "source": [
    "#时间戳转换\n",
    "pd.to_datetime(['2020.09.15','2020-09-16','2020/09/17','18/09/2020'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1680793995.3809853"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import time\n",
    "time.time()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timestamp('2023-04-06 15:13:15')"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.to_datetime(1680793995, unit='s')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timestamp('2023-04-06 15:13:15.380000')"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dt = pd.to_datetime(1680793995380, unit='ms')  # 标准时间\n",
    "dt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timestamp('2023-04-06 23:13:15.380000')"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dt + pd.DateOffset(hours=8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timestamp('2023-07-15 15:13:15.380000')"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dt + pd.DateOffset(days=100)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 时间戳索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2022-01-01    228\n",
       "2022-01-02    225\n",
       "2022-01-03    197\n",
       "2022-01-04     95\n",
       "2022-01-05    110\n",
       "             ... \n",
       "2022-07-15     40\n",
       "2022-07-16    298\n",
       "2022-07-17    209\n",
       "2022-07-18    236\n",
       "2022-07-19    277\n",
       "Freq: D, Length: 200, dtype: int64"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = pd.Series(np.random.randint(0, 300, size=200),\n",
    "               index=pd.date_range('2022-01-01', freq='D', periods=200))\n",
    "ts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "228"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 字符串进行索引\n",
    "ts['2022/01/01']\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2022-01-01    228\n",
       "2022-01-02    225\n",
       "2022-01-03    197\n",
       "2022-01-04     95\n",
       "2022-01-05    110\n",
       "             ... \n",
       "2022-02-26    196\n",
       "2022-02-27     79\n",
       "2022-02-28    284\n",
       "2022-03-01    133\n",
       "2022-03-02    183\n",
       "Freq: D, Length: 61, dtype: int64"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts['2022/01/01':'2022/03/02']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2022-01-01    228\n",
       "2022-01-02    225\n",
       "2022-01-03    197\n",
       "2022-01-04     95\n",
       "2022-01-05    110\n",
       "2022-01-06    163\n",
       "2022-01-07    177\n",
       "2022-01-08    113\n",
       "2022-01-09    261\n",
       "2022-01-10      2\n",
       "2022-01-11    180\n",
       "2022-01-12    135\n",
       "2022-01-13     73\n",
       "2022-01-14    192\n",
       "2022-01-15      7\n",
       "2022-01-16     69\n",
       "2022-01-17    241\n",
       "2022-01-18    122\n",
       "2022-01-19     73\n",
       "2022-01-20    157\n",
       "2022-01-21    220\n",
       "2022-01-22    200\n",
       "2022-01-23    266\n",
       "2022-01-24     35\n",
       "2022-01-25    230\n",
       "2022-01-26    194\n",
       "2022-01-27    243\n",
       "2022-01-28    116\n",
       "2022-01-29    149\n",
       "2022-01-30    250\n",
       "2022-01-31    219\n",
       "Freq: D, dtype: int64"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts['2022/01']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2022-01-01    228\n",
       "2022-01-02    225\n",
       "2022-01-03    197\n",
       "2022-01-04     95\n",
       "2022-01-05    110\n",
       "             ... \n",
       "2022-07-15     40\n",
       "2022-07-16    298\n",
       "2022-07-17    209\n",
       "2022-07-18    236\n",
       "2022-07-19    277\n",
       "Freq: D, Length: 200, dtype: int64"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts['2022']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "228"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts[pd.Timestamp('2022-01-01')]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2022-01-01    228\n",
       "2022-01-02    225\n",
       "2022-01-03    197\n",
       "2022-01-04     95\n",
       "2022-01-05    110\n",
       "             ... \n",
       "2022-02-26    196\n",
       "2022-02-27     79\n",
       "2022-02-28    284\n",
       "2022-03-01    133\n",
       "2022-03-02    183\n",
       "Freq: D, Length: 61, dtype: int64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts[pd.Timestamp('2022-01-01'): pd.Timestamp('2022-03-02')]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2022-01-01    228\n",
       "2022-01-04     95\n",
       "2022-01-07    177\n",
       "2022-01-10      2\n",
       "2022-01-13     73\n",
       "             ... \n",
       "2022-07-06    143\n",
       "2022-07-09    203\n",
       "2022-07-12    287\n",
       "2022-07-15     40\n",
       "2022-07-18    236\n",
       "Freq: 3D, Length: 67, dtype: int64"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 每隔三天\n",
    "ts[pd.Timestamp('2022-01-01')::3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2022-01-01    228\n",
       "2022-01-02    225\n",
       "2022-01-03    197\n",
       "2022-01-04     95\n",
       "2022-01-05    110\n",
       "2022-01-06    163\n",
       "2022-01-07    177\n",
       "2022-01-08    113\n",
       "2022-01-09    261\n",
       "2022-01-10      2\n",
       "2022-01-11    180\n",
       "2022-01-12    135\n",
       "2022-01-13     73\n",
       "2022-01-14    192\n",
       "2022-01-15      7\n",
       "Freq: D, dtype: int64"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts[pd.date_range('2022-01-01', freq='D', periods=15)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Int64Index([2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022,\n",
       "            ...\n",
       "            2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022],\n",
       "           dtype='int64', length=200)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts.index.year"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Int64Index([  1,   2,   3,   4,   5,   6,   7,   8,   9,  10,\n",
       "            ...\n",
       "            191, 192, 193, 194, 195, 196, 197, 198, 199, 200],\n",
       "           dtype='int64', length=200)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts.index.dayofyear"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/g_/dxml3hms52dfwqrcbt4fdmtw0000gn/T/ipykernel_17368/1902323770.py:1: FutureWarning: weekofyear and week have been deprecated, please use DatetimeIndex.isocalendar().week instead, which returns a Series. To exactly reproduce the behavior of week and weekofyear and return an Index, you may call pd.Int64Index(idx.isocalendar().week)\n",
      "  ts.index.weekofyear\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Int64Index([52, 52,  1,  1,  1,  1,  1,  1,  1,  2,\n",
       "            ...\n",
       "            27, 28, 28, 28, 28, 28, 28, 28, 29, 29],\n",
       "           dtype='int64', length=200)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts.index.weekofyear"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 时间序列常用操作"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 数据移动"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "ts = pd.Series(np.random.randint(0, 1024, size=365),\n",
    "               index=pd.date_range('2020.1.1', freq='D', periods=365))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2020-01-01      NaN\n",
       "2020-01-02      NaN\n",
       "2020-01-03    179.0\n",
       "2020-01-04    951.0\n",
       "2020-01-05    968.0\n",
       "              ...  \n",
       "2020-12-26    744.0\n",
       "2020-12-27    533.0\n",
       "2020-12-28     87.0\n",
       "2020-12-29    555.0\n",
       "2020-12-30    516.0\n",
       "Freq: D, Length: 365, dtype: float64"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts.shift(periods=2)  # 数据向后移动2天"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2020-01-01    968.0\n",
       "2020-01-02     65.0\n",
       "2020-01-03    307.0\n",
       "2020-01-04    472.0\n",
       "2020-01-05    995.0\n",
       "              ...  \n",
       "2020-12-26    516.0\n",
       "2020-12-27    853.0\n",
       "2020-12-28      2.0\n",
       "2020-12-29      NaN\n",
       "2020-12-30      NaN\n",
       "Freq: D, Length: 365, dtype: float64"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts.shift(periods=-2)  # 数据向前移动2天"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 日期移动"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2020-01-02    179\n",
       "2020-01-03    951\n",
       "2020-01-04    968\n",
       "2020-01-05     65\n",
       "2020-01-06    307\n",
       "             ... \n",
       "2020-12-27     87\n",
       "2020-12-28    555\n",
       "2020-12-29    516\n",
       "2020-12-30    853\n",
       "2020-12-31      2\n",
       "Freq: D, Length: 365, dtype: int64"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts.shift(periods=1, freq=pd.tseries.offsets.Day())  # 向后移动1天"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2020-02-01    179\n",
       "2020-02-01    951\n",
       "2020-02-01    968\n",
       "2020-02-01     65\n",
       "2020-02-01    307\n",
       "             ... \n",
       "2021-01-01     87\n",
       "2021-01-01    555\n",
       "2021-01-01    516\n",
       "2021-01-01    853\n",
       "2021-01-01      2\n",
       "Length: 365, dtype: int64"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts.shift(periods=1, freq=pd.tseries.offsets.MonthBegin())  # 向后移动1月"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 频率转换"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2020-01-31     774\n",
       "2020-02-29     757\n",
       "2020-03-31     699\n",
       "2020-04-30    1012\n",
       "2020-05-31     708\n",
       "2020-06-30     753\n",
       "2020-07-31     731\n",
       "2020-08-31     561\n",
       "2020-09-30     788\n",
       "2020-10-31     554\n",
       "2020-11-30     518\n",
       "Freq: M, dtype: int64"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts.asfreq(pd.tseries.offsets.MonthEnd())  # 频率转换成月"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2020-01-01     179\n",
       "2020-01-08     236\n",
       "2020-01-15     624\n",
       "2020-01-22     543\n",
       "2020-01-29    1019\n",
       "2020-02-05     466\n",
       "2020-02-12     368\n",
       "2020-02-19     674\n",
       "2020-02-26     997\n",
       "2020-03-04     181\n",
       "2020-03-11     407\n",
       "2020-03-18     643\n",
       "2020-03-25     960\n",
       "2020-04-01     630\n",
       "2020-04-08     896\n",
       "2020-04-15     200\n",
       "2020-04-22     846\n",
       "2020-04-29     352\n",
       "2020-05-06     765\n",
       "2020-05-13     179\n",
       "2020-05-20     204\n",
       "2020-05-27    1002\n",
       "2020-06-03     366\n",
       "2020-06-10     518\n",
       "2020-06-17     271\n",
       "2020-06-24     486\n",
       "2020-07-01     549\n",
       "2020-07-08     656\n",
       "2020-07-15     938\n",
       "2020-07-22     524\n",
       "2020-07-29     263\n",
       "2020-08-05    1023\n",
       "2020-08-12     898\n",
       "2020-08-19     761\n",
       "2020-08-26     913\n",
       "2020-09-02     232\n",
       "2020-09-09     941\n",
       "2020-09-16      82\n",
       "2020-09-23     917\n",
       "2020-09-30     788\n",
       "2020-10-07      44\n",
       "2020-10-14     843\n",
       "2020-10-21     610\n",
       "2020-10-28      19\n",
       "2020-11-04     630\n",
       "2020-11-11      92\n",
       "2020-11-18    1004\n",
       "2020-11-25     921\n",
       "2020-12-02     226\n",
       "2020-12-09     832\n",
       "2020-12-16     393\n",
       "2020-12-23    1001\n",
       "2020-12-30       2\n",
       "Freq: W, dtype: int64"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts.asfreq(pd.tseries.offsets.Week())  # 转换成周"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2020-01-01 00:00:00    179\n",
       "2020-01-01 01:00:00      0\n",
       "2020-01-01 02:00:00      0\n",
       "2020-01-01 03:00:00      0\n",
       "2020-01-01 04:00:00      0\n",
       "                      ... \n",
       "2020-12-29 20:00:00      0\n",
       "2020-12-29 21:00:00      0\n",
       "2020-12-29 22:00:00      0\n",
       "2020-12-29 23:00:00      0\n",
       "2020-12-30 00:00:00      2\n",
       "Freq: H, Length: 8737, dtype: int64"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts.asfreq(pd.tseries.offsets.Hour(), fill_value=0)  # 转换成小时，会产生空数据，用0填充"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 重采样"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2020-01-31    17221\n",
       "2020-02-29    14374\n",
       "2020-03-31    16702\n",
       "2020-04-30    15476\n",
       "2020-05-31    13009\n",
       "2020-06-30    15015\n",
       "2020-07-31    15671\n",
       "2020-08-31    15680\n",
       "2020-09-30    13039\n",
       "2020-10-31    15536\n",
       "2020-11-30    16711\n",
       "2020-12-31    14530\n",
       "Freq: M, dtype: int64"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts.resample(rule='M').agg(np.sum)  # 按月统计每个月的求和，和之前的分组聚合类似"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2020-01-31     17221\n",
       "2020-04-30     63773\n",
       "2020-07-31    107468\n",
       "2020-10-31    151723\n",
       "2021-01-31    182964\n",
       "Freq: 3M, dtype: int64"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts.resample(rule='3M').agg(np.sum).cumsum() # 按季度求累和"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### DataFrame重采样"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>price</th>\n",
       "      <th>volume</th>\n",
       "      <th>time</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>63</td>\n",
       "      <td>4</td>\n",
       "      <td>2020-09-15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>74</td>\n",
       "      <td>15</td>\n",
       "      <td>2020-09-16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>99</td>\n",
       "      <td>17</td>\n",
       "      <td>2020-09-17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>98</td>\n",
       "      <td>33</td>\n",
       "      <td>2020-09-18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>24</td>\n",
       "      <td>95</td>\n",
       "      <td>2020-09-19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>360</th>\n",
       "      <td>50</td>\n",
       "      <td>73</td>\n",
       "      <td>2021-09-10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>361</th>\n",
       "      <td>42</td>\n",
       "      <td>22</td>\n",
       "      <td>2021-09-11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>362</th>\n",
       "      <td>73</td>\n",
       "      <td>93</td>\n",
       "      <td>2021-09-12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>363</th>\n",
       "      <td>65</td>\n",
       "      <td>61</td>\n",
       "      <td>2021-09-13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>364</th>\n",
       "      <td>50</td>\n",
       "      <td>71</td>\n",
       "      <td>2021-09-14</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>365 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     price  volume       time\n",
       "0       63       4 2020-09-15\n",
       "1       74      15 2020-09-16\n",
       "2       99      17 2020-09-17\n",
       "3       98      33 2020-09-18\n",
       "4       24      95 2020-09-19\n",
       "..     ...     ...        ...\n",
       "360     50      73 2021-09-10\n",
       "361     42      22 2021-09-11\n",
       "362     73      93 2021-09-12\n",
       "363     65      61 2021-09-13\n",
       "364     50      71 2021-09-14\n",
       "\n",
       "[365 rows x 3 columns]"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(data={'price': np.random.randint(0, 100, size=365),\n",
    "                        'volume': np.random.randint(0, 100, size=365),\n",
    "                        'time': pd.date_range('2020.09.15', periods=365)})\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>price</th>\n",
       "      <th>volume</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>time</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2020-09-30</th>\n",
       "      <td>838</td>\n",
       "      <td>554</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-10-31</th>\n",
       "      <td>1293</td>\n",
       "      <td>1742</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-11-30</th>\n",
       "      <td>1496</td>\n",
       "      <td>1346</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-12-31</th>\n",
       "      <td>1255</td>\n",
       "      <td>1774</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-01-31</th>\n",
       "      <td>1672</td>\n",
       "      <td>1470</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-28</th>\n",
       "      <td>1279</td>\n",
       "      <td>1284</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-03-31</th>\n",
       "      <td>1650</td>\n",
       "      <td>1552</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-04-30</th>\n",
       "      <td>1537</td>\n",
       "      <td>1386</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-05-31</th>\n",
       "      <td>1447</td>\n",
       "      <td>1435</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-06-30</th>\n",
       "      <td>1362</td>\n",
       "      <td>1183</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-07-31</th>\n",
       "      <td>1417</td>\n",
       "      <td>1459</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-08-31</th>\n",
       "      <td>1585</td>\n",
       "      <td>1521</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-09-30</th>\n",
       "      <td>722</td>\n",
       "      <td>734</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            price  volume\n",
       "time                     \n",
       "2020-09-30    838     554\n",
       "2020-10-31   1293    1742\n",
       "2020-11-30   1496    1346\n",
       "2020-12-31   1255    1774\n",
       "2021-01-31   1672    1470\n",
       "2021-02-28   1279    1284\n",
       "2021-03-31   1650    1552\n",
       "2021-04-30   1537    1386\n",
       "2021-05-31   1447    1435\n",
       "2021-06-30   1362    1183\n",
       "2021-07-31   1417    1459\n",
       "2021-08-31   1585    1521\n",
       "2021-09-30    722     734"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.resample(rule='M', on='time').sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据可视化"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "pip install matplotlib"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 线形图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.443397</td>\n",
       "      <td>0.423180</td>\n",
       "      <td>1.098056</td>\n",
       "      <td>-0.100880</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.224635</td>\n",
       "      <td>0.144478</td>\n",
       "      <td>0.783315</td>\n",
       "      <td>-0.165401</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.498831</td>\n",
       "      <td>-0.534424</td>\n",
       "      <td>-0.895885</td>\n",
       "      <td>0.254168</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.760515</td>\n",
       "      <td>0.226605</td>\n",
       "      <td>-0.099458</td>\n",
       "      <td>-0.286621</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.421812</td>\n",
       "      <td>0.945151</td>\n",
       "      <td>0.674309</td>\n",
       "      <td>0.331187</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>995</th>\n",
       "      <td>0.502627</td>\n",
       "      <td>-0.094634</td>\n",
       "      <td>-0.016540</td>\n",
       "      <td>2.446707</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>996</th>\n",
       "      <td>-0.196386</td>\n",
       "      <td>0.981381</td>\n",
       "      <td>-1.205275</td>\n",
       "      <td>-0.685954</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>997</th>\n",
       "      <td>-0.787322</td>\n",
       "      <td>-0.819988</td>\n",
       "      <td>0.378660</td>\n",
       "      <td>0.286402</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>998</th>\n",
       "      <td>0.574366</td>\n",
       "      <td>1.196604</td>\n",
       "      <td>-0.065948</td>\n",
       "      <td>-1.298874</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999</th>\n",
       "      <td>-1.027606</td>\n",
       "      <td>2.014610</td>\n",
       "      <td>-0.358606</td>\n",
       "      <td>0.251781</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1000 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            A         B         C         D\n",
       "0    1.443397  0.423180  1.098056 -0.100880\n",
       "1    0.224635  0.144478  0.783315 -0.165401\n",
       "2   -0.498831 -0.534424 -0.895885  0.254168\n",
       "3   -0.760515  0.226605 -0.099458 -0.286621\n",
       "4    0.421812  0.945151  0.674309  0.331187\n",
       "..        ...       ...       ...       ...\n",
       "995  0.502627 -0.094634 -0.016540  2.446707\n",
       "996 -0.196386  0.981381 -1.205275 -0.685954\n",
       "997 -0.787322 -0.819988  0.378660  0.286402\n",
       "998  0.574366  1.196604 -0.065948 -1.298874\n",
       "999 -1.027606  2.014610 -0.358606  0.251781\n",
       "\n",
       "[1000 rows x 4 columns]"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df1 = pd.DataFrame(np.random.randn(1000, 4), columns=list('ABCD'))\n",
    "df1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAioAAAGdCAYAAAA8F1jjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydd3gU5drG75ntNZueEBISei8qINhAUUDAeuwVu8fezhF7PeqxfpZjR2zYFRQURURs9N57SUiv2/t8f7zTZ3azCQlJcH7XxcXu7Ozs7GZ35p6n3A/FMAwDDQ0NDQ0NDY1OCN3RO6ChoaGhoaGhkQhNqGhoaGhoaGh0WjShoqGhoaGhodFp0YSKhoaGhoaGRqdFEyoaGhoaGhoanRZNqGhoaGhoaGh0WjShoqGhoaGhodFp0YSKhoaGhoaGRqdF39E7cKjE43GUl5fD4XCAoqiO3h0NDQ0NDQ2NFGAYBh6PB926dQNNJ46bdHmhUl5ejsLCwo7eDQ0NDQ0NDY1WUFpaiu7duyd8vMsLFYfDAYC8UafT2cF7o6GhoaGhoZEKbrcbhYWF/Hk8EV1eqHDpHqfTqQkVDQ0NDQ2NLkZzZRtaMa2GhoaGhoZGp0UTKhoaGhoaGhqdFk2oaGhoaGhoaHRaunyNioaGhoaGRleCYRhEo1HEYrGO3pV2RafTQa/XH7J1iCZUNDQ0NDQ0DhPhcBgVFRXw+/0dvSuHBavVivz8fBiNxlZvQxMqGhoaGhoah4F4PI69e/dCp9OhW7duMBqNR6xRKcMwCIfDqKmpwd69e9GnT5+kpm7J0ISKhoaGhobGYSAcDiMej6OwsBBWq7Wjd6fdsVgsMBgM2L9/P8LhMMxmc6u2oxXTamhoaGhoHEZaG1noirTFe/37fFoaGhoaGhoaXQ5NqGhoaGhoaGh0WjShoqGhoaGhodFp0YSKhoaGhoaGRkosXboUOp0OU6ZMOWyvqQkVDY0UYBgG364vx6w/9+LNJbvRFIh09C5paGhoHHbeffdd3HLLLfjtt99QXl5+WF5Ta0/WOCIobwzgx82VuGBkIazGtv1ah6NxPD5vCz5ctp9fdrAxgMfOHNymr6OhofH3g2EYBCId41BrMeha5OPi9Xrx2WefYdWqVaisrMSsWbNw3333teMeEjShonFEcNHby7C/zo89NT48flbbCoiH5m7CpytLJcvWHmhs09fQ0ND4exKIxDDwoR875LW3PDaxRRd2n3/+Ofr3749+/frh0ksvxe23344ZM2a0u2mdlvrROCLYX0fsqH/YVNHm25aLFADYXuVBNBZv89fS0NDQ6Ky8++67uPTSSwEAkyZNQlNTE5YsWdLur6tFVDSOKALh1EOoDMPgwbmbkOc04+aT+7TodcLROBoDEWTZTS3dRQ0NDQ0ei0GHLY9N7LDXTpXt27djxYoV+OabbwAAer0eF1xwAd59912MGzeunfaQoAkVjSOKluR699b68NGyAwCAK48rgd3Usp/D6f/3Oz6/fgyKs2wtep6GhoYGB0VRbV5X1x68++67iEaj6NatG7+MYRiYTCa8+uqrSEtLa7fX1lI/GkcUcSb1dT3BKH97a4VbdR13MHF3T7UnhH9+vCb1F9TQ0NDogkSjUXzwwQd4/vnnsW7dOv7f+vXr0a1bN3zyySft+vqdX8ZpaLQTDf4wf3tbpQcjizMU61Q2Bfnb8245Hpl2Iy58axlfE7MlgcDR0NDQOFKYN28eGhoacPXVVysiJ+eeey7effdd3HDDDe32+lpERaPLE5eFUSIpFrk2+oVoSbU7qLpOeWMAANA/z4HBBWnIT7MowrTy19fQ0NA4knj33XcxYcIE1fTOueeei1WrVmHDhg3t9vpaREWjy+MLRyX3631h5DqbHyde7xMiKjWekOo6XEQlP03Yns0oLUCr8gSRn2ZJeX81NDQ0uhLfffddwsdGjRoFhmnfizUtoqLR5fGGpEKl2q0uOuQ0+psXKmUNJKKSJxIiFplQ2VvjS+n1NDQ0NDRajiZUNLo84qJYAKj2qKdx5NSLhEqtVylUIrE4vttALKKHdhdCntGY9Ophd60mVDQ0NDTaC02oaHR55EKlwZ/aHJ5aj1iohBWPX/y2UDR7yoAcfvm+Oqkw0SIqGhoaGu2HJlQ0ujweWQuxOKWjBsMwWLWvXiI43LIhg/E4g5X7Gvj72SJjtxKZb8qeWm+L91lDQ0NDIzU0oaLR5ZHXqMhFh5zvNlTgH28sxbZKj7CNcFTSvVMlSx+JZ1k8dc4QXHZsD/z33KEAUq+J0dDQ0NBoOZpQ0ejyyFM/jc0JlfXK0eQMA2ytJJ4o7/y+B6e+8Bv/mNxmukemDY+fNRi9c+0AkpvCaWhoaGgcGppQ0ejyyFM/Tc0IlTSLQXX5lJf/wPZKD56Yv1USpfnihjFJt9Pc62loaGhotJ52FSq//fYbpk2bhm7duoGiKMyZM0fyOMMweOihh5Cfnw+LxYIJEyZg586d7blLGkcgXjaiYmXbhhubKaYVCxUdLR1P/plsUvJFowoxuEB9hoXTTLbjDUU10zcNDQ2NdqJdhYrP58OwYcPw2muvqT7+3//+Fy+//DLeeOMNLF++HDabDRMnTkQwmFp7qYYGALhZodI9nXidNBfhsCUZPjjzz72S+93TrQnX5QQPwyjTTxoaGhoabUO7CpXJkyfjiSeewNlnn614jGEYvPTSS3jggQdw5plnYujQofjggw9QXl6uiLxoaCSDS9NwoqI5oSK22I81EwkpzEgsVIx6mq9f0dI/GhoaRzJXXnklKIri/2VmZmLSpEntap3P0WE1Knv37kVlZSUmTJjAL0tLS8Po0aOxdOnShM8LhUJwu92Sfxp/b7gaFS6i0lx7cjASk9y/Y0Jf2E16jFIZSthT1oosx2kh0Zn752zEK4u0tKWGhsaRy6RJk1BRUYGKigosWrQIer0eU6dObffX7TChUllZCQDIzc2VLM/NzeUfU+Opp55CWloa/6+wsLBd91Oj8+NRSf0kqxkJRYWIyoUjC3HbhD7Y+Mhp+PyGMfj3pP6SdXtl25O+Nvf47ztr8fzCHQoRpKGhoXGkYDKZkJeXh7y8PAwfPhz33nsvSktLUVNT066v2+W6fmbMmIGmpib+X2lpafNP0jiikad+4gzxRdlV7cHLi3bCJ/NZ4cTESX2z8fC0QQAEn5Qbx/XCrOkj+XXlc33knNw/R3I/FEltcrOGhoYGAFLkFvZ1zL9DGCbo9Xrx0UcfoXfv3sjMzGzDD0RJh01PzsvLAwBUVVUhPz+fX15VVYXhw4cnfJ7JZILJZEr4uMbfDy6ikmU3waSnEYrG0eSPYOorfyAYiaMpEMGDUwfy63NiYny/bFUhclLfbDx25iAMSdDtI0Y+NTkUiwFQb3/W0NDQUBDxA//p1jGvfV85YEye3hYzb9482O0kiuzz+ZCfn4958+aBpts35tFhEZWSkhLk5eVh0aJF/DK3243ly5djzBh13woNDTU4oWI36eGyEpFQ6Q4iyAqSP3fVStYPRUlExWxQj5ZQFIXLxxRjRFF6s6/NvR5HONqJIyoV64HXjwe+ueGQrqQ0NDT+nowfPx7r1q3DunXrsGLFCkycOBGTJ0/G/v372/V12zWi4vV6sWvXLv7+3r17sW7dOmRkZKCoqAi33347nnjiCfTp0wclJSV48MEH0a1bN5x11lntuVsaRxhcMa3DrEfPLDuq3CF8vaaMfzwuOylzAsZkOHSd3qWEyrrZQNVG8u+UhwFnfvPPAYDfXwD8dcDEJ9t3/zQ0/o4YrCSy0VGv3QJsNht69+7N33/nnXeQlpaGt99+G0888URb7x1PuwqVVatWYfz48fz9O++8EwBwxRVXYNasWfjXv/4Fn8+H6667Do2NjTj++OOxYMECmM3m9twtjSOIQDjGF8c6LQacd0x3LN1Th/WlTfw6O6q8aApEEIrG8NPmKtT7SFeQWZ+8/iQVXFaj5H44Fke9L4x6Xwi9cxyHvP02xVsl3K5Yl5pQiQSBRY+S28dcBWT2apdd09D420JRLUq/dCYoigJN0wgEAu36Ou0qVMaNGwcmSYiZoig89thjeOyxx9pzNzSOYCrdxBzQYtDBadajiPU92VIhbVu/etZKBCIxbC4XlrdJRMWijKic+N/F8IaiWHz3OMWk5Q7FWy3crt0B9Jvc/HOahMgUwj5g7UfAzoXA2W8ABkvi52loaBxxhEIhviu3oaEBr776KrxeL6ZNm9aur9vlun40Ohevrn0V//7t34gz7ZPyYBgGL/y0HZ+tPCBZvnxPHe79agN2VJEJyPlpZlAUhWyHeqH1qv0NEpECAOmyaEhrsMqKccPRON+FJK+N6XA8Qtt/fNcivP/nXuyr9SV/TpPocw80AHNvArbMATZ9DQCIxCJ4e8Pb2Fy3uR12WENDozOxYMEC5OfnIz8/H6NHj8bKlSvxxRdfYNy4ce36uh3W9aPR9QlGg3hzw5sAgKuHXI2+6X3b/DV21/jw8i+kzumsEQUwsemaC95aBgBYuIWkM3KdJF2Y40gtbeg061Pq6mkOiqLw2JmD8NBccqIOitqTO52niiiiQu9dguN3T8b2BQUofuRHQJfgUNAoav+v2SbcjoVw0HsQk76aBAB4ee3L2HjFxvbYaw0NjU7ArFmzMGvWrA55bS2iotFqdjft5m8nS/EdCv6w4IGyYm+94vE6tt4kL40IFHm78a0n91Y8BwD65zmh17XN1//yMcUY1M0JAGgQueKGOlNhbSwChD2SRb3oCkzUrQL2/Jr4eT5RumjfH8LtsB9PLGu/4jkNDQ0NDk2oaLSaHfU7+NuhWKhdXkM87O+BOZsAqIuiRDN57jytH3b/53TF8kz7oad9xBj15KdU5xU+B3dnmf8TaCD/EsCEEoyhWP4m8ItIjGz9Vrjtq0Ek1knen4aGxhGNJlQ0Ws2a6jX87WC07SdeL9hUged+2s7f31/nx91frOenJYvpkWR4oI6msPjucRjfL5tf1lbRFA4juz2uowgAqj1tLN7irUglNewHnikG3hqfcBVfLVswW7Md2Podue2vB374V+Lt+moRY6T744/4W75/GhoaGs2gCRWNVrOhRpiaGYy1vVC54aM1WHugUbLsy9Vl+HbdQcW6yaYcA0BJlg3vTR/F32/r+hEuolLjFYTK3uYKVVuCvx54vh8pZm0JGz8n/7vLEq7ir9lHbrw2CvjsUuDAMuDg6uTbdZfBH5UKk6XlSxGJs1EWXy0Q70SpLw0NjS6LJlQ0Wo07LKQMAtG27aOPxBKf5EoblK81osjVou0ncqVtLVyRrzj1s6fGi5/2/dQ2HTFb5gK+GtIe3BKSlA6VxkmEKV63B4iKoj8HV0vbktUoW6WIoNz+6+34aMtH5PnP9gZmTQFiyuiXhoaGRkvQhIpGqxGfqJKlfjbXbcbZc8/Gr6W/prTdpbvrsKGsUbJs0qA8/vb+Ommk4vGzBsMgSuW8ctEIAMAj0wZCzmNnDkJRhhV3ndq2HUomNqIiTvf4qF24a8lduHDehYdWz3FgGTDvduF+sCnhqgqStI0/Eb0EAGBp2gnU7xEeiIYAt8wp8+LPpffDXgTY4tw+6X34xS+sfgEoXweAAQ78Rf5paGhoHAKaUNFoFQzDSKIoyYppn1z2JHY17sItv9wCb9iLWxbdgieWPYFoXHm1va3SjYveXoZzX18qWd4z24bLju0BANhXK72SL5KlfaYN64b1D5+GK48rUWz/8jHF+O1f41HcxkZsXOpnd7WXXRKFtfgN/vGVVStbv/FPL5bebzygvl4LWRcnHVGOwEGgeovwQFOpUqg48iDHz/79z+l9Dr8sw5wBBETdWQfXyJ+moaGh0SI0oaLRKoKxIBhRXiFZ6scXESIgv5b9il/LfsVn2z/DptpNinU3HVTvQOmebkUOa+a2TxZRObZnhmL9NMvhnWDMRVQ8rNkbbZS2Ulf6iNlaPM7gmQXbeP+XlPDXSe/v+DH158oKXkEJKa8qpCPGUKDBALU7hXUaSwG3rA4oZxBw0r8BozAWIMDWJU3oMQHTB08HAFj1VlJPwyEWQDIqvBVYXdVMLYyGhsbfHk2oaLQKeX1CstRPtkXottndKHiv1AeVvih6mlLdRp9cO3JZrxTOn8Ri0OGve0/m60M6kgybtN25OFea6vGGSaTlpy2VeP3X3bj2g1Wpb5ySvb8tc1J/bsgrvT/hYfGG4QNrg1+/V1i8ayGwZzG5nT8MuGYRohSA8fcB9+4Huo9EBECUTStZDVac1/c8AEBNoAaMTySsEqSpavw1OO2r03Dlgiux392+k1e7CqGdO1H71ttgIlrbt4aGGE2oHMH8Wvor9jXta5dtyzs+knX98J0gkHYKNYYaFetyEQk5fXMc6ClL10wekodurs4xb4ZzxuUYVCStDeGiSjWtaVmWR0Vqd6XeUSP2SOk+Ehh7KzYUXoo7wzeQ/QLZb6Zhn/rzz30XP0XrcezsY7Fg3wKA1gFGO/y0cOiw6C3IseaQl4uF4PbXiF7fI98iAGBVlSDU9jTuUV3nSIRhGGyv9CCqUiy+79LLUPPCC6h88klEGxL73mho/N3QhMoRyoqKFbjll1swbc40fLPzG7y/+f023b48ovLD3h8QjoVV1xVHTlZUruBvf7rtU8V2GnzSbQwucOKlC4YjzWpQDPizmzrPBIgc0Yyhc0YUgNE1Sh73RMgJWxz9CUVTaJH2qKSIogHpDJ5kiIWCLRugKOw+aga+jp8IAPAxrFARR1TEOLvhriV3IRQL4Z4l9+CFVS9gCLMbs512AICRNsJAG2DSmZBmIiMJqkOiiEoCMzlxOrAmUKO6zpHIu3/sxcSXfsMj3yk7weJNJPrU+Oln2HXKBMQaGw/z3rUPK/fV49v15fh2fXlq33mNTktlZSVuueUW9OzZEyaTCYWFhZg2bRoWLVrUrq+rCZUjlOWVy/nbD/31EJ5b9RwqvBVttn15TcpB70HM3DRTdd2GkPrV4db6rXh749v8/XicwQsLBbfbR88YhHm3nICzRhQAUKZXrMZOJFREEZUcpxkBhogziiH7+OGWDxGIBqDXCamtRj+JNEVjcVS5E0SkEnXNbP4mpf2Ki+tbeo4DAIgv5r1sRIX2JaiZkY2ff2/zewCA/6W7AABZliz+MS7FVyOOlCWIqIgFarW/WnWdI5FnfyQGhh8tSy40Gb8foV27DscutSuxOIPz3liKWz9Zi1s/WYvXfun67+nvyr59+3D00Ufjl19+wbPPPouNGzdiwYIFGD9+PG66qYX+Ti1EEypdjFg8hmdWPIOPt36cdD01l9AqfwsKOJtBnvoBgE+2faJYxjAMX5+hxtrqtfztStHJ+oxh3XDF2GLJuhRF4bWLj+LvO8ydR6iIoz0Wgw7eKJmcrI/l88vn7pqLgMhorsEfxp+7atH7/h8w+j+L8MHSfcoNVyXwYEk2n4cjHkN9BdnmkthQLM88GwAk+0Cb7ImfP/2HZmc45dmEbiAu/VMtipYgmCCiEhXW+TsJFa47TE7cpzQHZI6A6INXlsqdt6HtLpY0Di///Oc/QVEUVqxYgXPPPRd9+/bFoEGDcOedd2LZsmXt+tqd50ivkRLLK5bjo63E9GtI1hAMzR6qup44tM5RG6hts/3ghFC+LR8VPnLwyTAru29CsZDCal3MrsZdYBgGFEVJDmqPnDFIdf1+ecKJdVh3V2t2vV3IsBnxwJQBmPnHXkwblo8FS8hnzUSd/K+sPlgPY1gkVHwR3Pn5Ov7+E/O24vIxxdINe2XiUm8GokGgehuSEo8j/saJyAqR6cePRy/FUesqMLp3DoLsPpw9ogA4YAcS1W72GAtPWF1ocDiNTv42J1RqGFH6LuQBGAagpEXSgYgQkdtW38x7OYIwivx+ft1ejXH9yGcWqVCewOP+rj+SwBOUfrkMbTy64khAbvVwOLHoLaAo9QYGMfX19ViwYAGefPJJ2GxKaweXy9UOeyegCZUuxte7vuZvv7fpPXSzd0OZpwy3HX0beqb15B/zRpRRjLasBeBcaXu7eiPHmoP1NesBkMJZAy20BnP7QYHC6stW44vtX2BA5gCYdCZcMO8CNIWaEIwFYdFbeKFSmGFRpHk4ijJsKMmywaijMVqlLbkjueaEnrjmBPI3qA+RKEEgaIaBzQotq1gGj2cTaOMxiIdzUesNwSuaW6T6nr2yv1lGT9Ly660kgwYt6eo7468DXS20f9cyaWhgU01cRMVs0CGXlnXlFI4GSpeDMadh/oZyrK/amvQ993D24G9zqZ8qcRdWPEIM5AzSYmOxkN5avxV7Gvegp6snjnTEJ+p/fbkBK+6fAADwr12rWFctytLVkEdUEkWU/s4EogGMnj26Q157+cXLYTUkHz8CALt2kQvK/v37H4a9UqJ9a7oQjcFG/LhP8ND4+cDP+GDLB/il9Bc8vvRxfvmvpb9i4f6FiufX+JMLlaeWP4WnVzzdbLgfANxskaTT5MQTx5EJu7sad2Hs7LF4ec3L/HrcCclmsMFAG3DxgIsxImcE+qX349cJsfbtPvagZktSe2LU01h4x4n49pbjOvTqzBfxJSwejsaj8LOpjXDdSfzytdVrsSvwO6w9/w8A8MfOWvhEERZ/WNnxFPBVYa7dBh931WOwAgb2iiaZQ62sXbwJNizcUoUqd5AXKhaDDtmQtYif/SYw9EJsn/w5bp69FjOXrVNsuodBEIgXDbiIv81HVHQ6wOwS2qrlPjCQpn4AJKxvOtIw6IWrV4tREHSBdesAAJk3XA/7KacAOFIiKtLvtEHX/NW7RucjlXNCe6JFVLoQ+z2J/SY8rJ25P+LHLb/corpOXVB5whA/f/a22QCAi/tfjCJnUcJ1o/Eo1tWsA0BC/wWOAhhoAyLxCIKxIN7e+DZOLzkd/1v/P5h15EraZpCGC3W0DkbaiHA8zLc2c0KluW4evY7u0C+uP+LHsbOPRb4tHz/94yfF42KX3ngkHdNyHsV31YJ/CUXFQek8+GxVqeR5AZVBiR9Ga/FKdiZm5RTgm7IK4PRngY/OASI+6XweOWGpEGDYa5LN5U0IsOLIYqRBT30R+ORCAEB12lDkZJQA57yJ/8wk3Vm0QSqGor4S/GfAhQgvvx3DMgbAYC/gH5MIFZuLRHsa9hJ7/rQCyXZ2NZCiysklk/HD3h+wpGwJnwI8khGL60w2ghapqoLvT1I0berVG5GDxBX4iIioKISKdm0sx6K3YPnFy5tfsZ1eOxX69OkDiqKwbVvHpGk1odKFKPWUJnysu6M7AMEBVY1kEZW6gCBiNtZuTChU9jTuwZlzz+TvO4wOGGgDStJKsKNB6Ni56serJN0+doOyaNOsNyMcDqMuWIdoPApunp+tE7Udq7GljritVvgqVE+uknwzo4cRypwubS5HzNdPsiwSYxCOxiXh8T91EQAG7GKCiP5rN/R6E6lTAVSFijcUxT1frMcl3WtwvGj5xEG5+HFzFZbvqcesv/YBIBEV9JuMmUM/RmTNbNR2vxHTGwO487vZ2BCdDZ3tdFB6EjnrZZ6A9RvGgInZsL0ggvOCIcArrXnihEqVXgfoMwGTkwiVul1AyQn8euXecmxvIN0vo/JG4Ye9P6Ax1IhANJBSGLorI65RyXaYwMTj2HfRRYhWkt+toaAAtI18BkdCROU99rvGodciKgooiur03/uMjAxMnDgRr732Gm699VZFnUpjY2O71qlo8rYLwRlj5Vhy+GWcd4U77EZtoDapUElWTDttzjT+ttg9Vs6n2z+V3OeKKYdkDZEsl7ck24zKk7WZPeFeOO9CTP56Mko9+wB0Ln8UNcSjA9SM7jiXXh1MACgYoKwjkVvsc0jSP7EIeoaE7fu419Kzni0qQuWFn3bgh02VeO2nDZLl3DykN38TzNW4CdLpJcPxVPQSrK/X49ZP1mJz/CXoTNWwFs2C3kHqXIJBK5gY+Rv+uJ/tb/ZVk0JZFq5GpU6nQ8ycDiadnbXUsA8Mw2Bt9Vr4I37sahRaVHu7eoOmyGFIra7qSMMvSvUFInGE9+5FtFwopDUUFIC2ks+5q0dUGIbBbzukF0fBSIpGhRqdjtdeew2xWAyjRo3CV199hZ07d2Lr1q14+eWXMWbMmHZ9bU2odCH+LP8TADCl5xR+GVfMmPXdctSMOAFVl18NXUw9n5hIqMTi0pRDUyhx7UOZp0xynxMq/xr5r6T7btMrhYo87Dhz6XyyrqnjLfGTERdNJFZrA+eEip4iof1o1MCfxGmGCAaKEupbJg3K46Mo4poVBN0IUcJPlI/U6DihohRJK/cRAWSHtIugQMXBl6uR6JFJ/jYr9tZj1X6pwNSZSddRdaNQIL3Dw24rFgaCjfzyTHMGaAAxisINKMfkht/hoSgg4sef5X/i8h8ux/Qfp/MGgHpaj2HZw/i04N9BqPhExaW+UBSBjRv5+4YeRdBnZx0xEZXZKwSvGK42xZfAeVqj89OzZ0+sWbMG48ePx1133YXBgwfj1FNPxaJFi/D666+362trQqWLEIvH+DbOf/T9B7+cS6lM/5mcPPsfBEbsVhcqdcE6hSgBhPoWjkQGbYCy7ZlmHIjHmWZDl1xaQAxXv8LxjH4WbtB92+lTP2JxouYnw0VZDDQRFKFoHP+b8D+8MeEN0P4RZCVaECrPnDsUVlY0bKsQtQMHG+EXzT7i5ylxERWVidX72YGNVogiMY6eSFfpKOIGNzpT8KNxe4W/VYWfQYxrSxZ1Jen/eBGZUXIiWhZtxMGYDz/YbUDEj18O/AKApM0OuMkJbHLxZFAUxX+HfWEf4kw8YZHykYAvLBUqoa3kN+049VT0/OYbUDQNnZNESWNd2Ea/1hvC/d8IXWevXES+9/IuII2uRX5+Pl599VXs27cPoVAIZWVlmDt3LsaNG9eur6sJlS5CfbAecSYOmqJRICpgFA/848hSsb7QU3rEmbhqi7JcmDQEhftlnjK8teEtVLHOpfJBgre/X4tnfiQH23dOeyfh/ouNwTjMOunJM0hRuNfwaadP/Yg7VtQiKlzkw0CzQxQjcfTP6I+jc46FP0h+chQt+EukWQ28S+3V769CNWd8F2ySChWV1E+9L4ypr/yOKS//Dn84CjdbvGijBBETOvdDxTTpLLsREwbkAkjN4ZeJChGxSIzBviC5v26bUJeExU8iOyYVwo9nZeDnQLnke7p+HenwSTeTlBgXUfFFfbj1l1tx6pen8u3vRxKxOCNJfWSW70X9+2S0hbG4GLSViH19LhH10aq2M2g83CzeJpj45aeZMSCfCNtab6jDO0g0uh6aUOkicAIjw5wBHa3Dg8c+iGPzj8XVQ64GALhFkf28BkZRvJprIyclzpxNjDzVIx4W+M7Gd/DK2ldw2lenIc7EJUW3AMDEHHhzCal7GJ0/Gr1dvVX3X1zXwWEOS9MTAZqCjzF1fqEi6qjhRMkB9wG8uPpF1AXq+MiHEFEhJ+/KpiCYOBEMvXKISDv/mO6K7e+o8gK1O4Hfn4dPlPoRIipcMW0QU1/+HZsOurG53I1v1h7k1+UiKj/pxyGjeDBcVqko/O6W4/kaFXE7uM6+RfU9x2MOyf1akKv+vfukAwXzVNxU7wjtwi+lv/D3d4JETDiDQF6ohH1YUrYE9cF6LNq/6Ig4oe2q9uKWT9Zib62Pj6YYYxE8/cfreODbp/n1dJlCy7chj4j6SBcWKt+JHGhnXjmSH9oZjMR5Ua6hkSqaUDmMiK++11avxTU/XYM9Tcknx1b7q/Ht7m/5cDl3ZXp+v/Px9mlvo9hZjCxjBuyicoXjG3OxwHk/XHFBveTbiJV7ZdUeMLLJu+IIivw+V5wbZ+KYvXU2P1wPVVfAu+sexf7KBZKO9dKYUiLU1WDD58D8u2ChpYIkSFHYx+R1+tSPJKLCpn4u/+FyzNw0Ew/++SAf+TByEZUo+bzr/WGAIYLhqGIbXr5oBO6ZSAyUbj2lD7/NSncQ+N+xwLZ5SSMq8UgI5U3CH37lXiHaZWOFSs8CcnXukkVUxOZyYj8PvW2n6ntmotK/ax1DrpDP3v0g0CC0zfeMqJ+ExO6zDTryei6TC4DwnREL5A+3fojjPj1OMm27KxCKxnD+G0sx42tSezLhhSX4bn05npy/Ff4QEXG3rPsSw2qlBes6UceEPpdcVERrasDEup6N/v46H19EO+em4zAg3wmzQce3Y1c0KWurNDSSoQmVFIn7/Wj44gtEa1tnQ//m+jcxevZorKxciUgsgst/uBzLK5bjmh+vSfq8l9e8jPv/uB/3/EZEgXgIHEBa246yDwAtuvh07qpE+d334KLfBEHSzd4N2Y0Mii56GPsuvAjxsFAHID5BcPe5q9loXMgpv7ORpHYKzSPhqR8AJpKp2F95d8+sSbOw4NwFUtfRr68FVr6D3XXSk2KQomFEVBJR2dGwA/P3zBeiCZ0AcZ0OZwXPedSsrlrN76tJJ9SoAECjP8xHVIKxIM4Y1g3Z7NTlO0/ti/OOZlvMmwIA+7kH1CIq7HYr6hol+zVnXTl/20qxUR0ziYS4rIJQKcywSKY4i9uhuXbkeCRN2DCjB+JEdGXZyWvvZ3KFxz+/jL/ZMywIlf6WPFzcpD6UECCt7YAQUSn3Cfu/s2EnPGEPHvjzgYTP74ysO9CIFfvq8cmKAyitFy5MarwhUp/BMJhQulr5xKjwO9NnZQE6HRCLIVqb2Puos1LL+gwUuCwYXujil+e7yHeooqlj7OI1ui6aUEmRqv/+F5UPPoQD11zbque/uu5VAMDjyx7H/9b/j1+eyNZ+3p55eGvDW/h297eS5ccXHK9Yd4xtMAAgImuWGb1OOCD0S++HfmUM6GgMwQ0b4F++HLWBWjSFmvhi2glFxM47xsT4yIm4E4M7GVtjvRT7wAkbeUQl3ZwuqalBRBAcLll9R5CiYKcCfEQlEo/gkvmX4N7f78XUb6Z22DwMOcmKaXWUjt9Pk44Ld5Or4npfBIiTq0o14ZWXRtYv3CO0gCcrpp25JLH5EhdRMVhJ5MNhFoRK/zyn6nMAgDYQoRLzCX9jAxwAyH4UsCebN6LT8GtsGFmhVmg3HhYSBLCJNsPKJG5HtRvJd4VLAa2vXq9YJ57k+Z2NJn8ED8wRCkgXbRVSNxYDDX84ihK3+lA+y1HCsE1KpyNiBUC0KrHdQGeFq5MSi2MAyHOSCK8WUdFoKZpQSRH39z8AAEJt4MzHRSY4QrLujUpfJWb8PgOvrH1FUdtxYf8LFdubmHkcuZGehvRLL+WX+x1CeH9o9lDkNgrPKVuyANe9PhEXzLuAj6hkmDNg1ZOCvka27VRtuGFMfLXN4uFcZWVChYsq8DQJ7c2Py64WAzQFOwJ8e3JDsIFPd1T5q/D59s8Vr9sRiD8TeTGtjhaECtfVxEVUGnxhMAwbUVERKly04syy54TXUmtPZmtUdPHE3TE2NqLiSktn94vC7RP6YFihCzecpBSaAEAZ6qCzEFPBeEiImFj1grDpxrY5N8GOGyO3kYURHxBoBAAURaM4Nn0gaIrG+dmnwhpPXGfCtbaf2P1EAMDySqU7J4WuYxB2wVtLsbNaEPZlDYKwXranHr/vrMXoSmkNUHToCJR88zVMPaVzjvR55PPvinUqnG2+fLp5Ny2iotFKOncxQCcl5vWi/N/3wnn6ZKRNmdL8E0TsbdqrWFbtr0aho5C//1f5XwmfT1NKbUm5yYnTnpWPzOlXouEjMl05nGYFQK6Q+2f0R26TcNBnPvoaTwK44o4yrGr8Hk98HIV+xCYsHe2CP+pHfbAeRc4iVW+LeFhpYPbT5ioc0yNdIVTkXimxsm2g4wBFA70i0lbFEEXBQQVgN9JYWr5UIUzEzrcdiViofLfnO0nXFE3RfGeUk63BCHERFX8YDBtRCcSUB2unRfpzjAAIq9aokG2YVMYeH09vxBR6GXLQCACw2gWRcfuEvrh9Qt+E70tvF0R4xD0C5uwlYGg/TioaCZ++GwozrKjzCeIoADN8lBU2xg/UCn+bl057E7XhJri37IAnWUSF/a4MyxmWcB2uxqkrsK1SmuaqcEvF6LM/bscLlWTI45yTL8O79kF45eKjMWSAsqDakJOLIIBoZVcUKuR7KY7iAULEUIuoaLQUTagk4eOtH8Oit+CcPudIHDjr3nwT3kWL4F20qMVCRQ25UJHXjADAcd2Ow2UDL1MsB4BYI1lfl5YGfbdu/PJuO+tx+49W0LdOh1lvRpHfAkAqPC75NY7T1rLFkOUbcEY4F68dI+yDWkQlHuoGQBpJuPsLErYvKK4DRNqEc58FgHDZQey+8B7Yu2Wg8ERyMh8UCmGziUQS5jjseLC2Hnm7v8B5+19HPaSFhEWOxPOHDifiYtr1Nev5ydEAESqcsV6GiaQ0wmxEpSkQAeKJIypcC3E9Y0cG5UV19ggAQtRJ3vVjpKI47+ju2F/nxwrW6O0j41PSjRqVowvUicOY8TsAINI0AkzUCbrqOtw+VYcL+l/AC86nf5BGFOuQDhv8QPVW/vVsZhdsZhfuWfk7xooiKnkVY2HNXII9RvI+HeyUbafRiTRTmqrRIE13jaBvg08Z3apUOSGXuEkdTn3vIYhW06gLqhfLigtquxreRBGVNDb106gJFY2W0TWOAh1Apa8ST694Gg//9TB+3v8z4qJOmfCBxDN35Gyv345fS39VLB/XfRyOzj0aABEqYtQO2M+d9ByOKzhO9TViTWR9XVoaKIpCt+eE1MHYNX6c+MQCAEC6XxlGP22tNDR/0kJyBdcQbEAsHlPUhVw56Er4Q4nD8dWiqA1N0TDSQvqpYTYZeugtF8TL2xXVGOcTRM/RJUV4aOuzCpECAOEkqY7DiZp3CkdtoJavK8pkC58523RvMAqG7fpRE4BOswEmhJFBETH5afEMyeOzNs8iXWJsjYoZYYwszsDbVxyTeGdVRheoMXF0KWhjIwBgbA/SYv7sGVNx5eArJVExectwNVzkRg0rYCwk2lbRFMDq8gAsovUHBXSwi35HjrCQ8iy0C0LdYRBaobtKROX9pfsUy+RCxRiLwBwj0QYqkxSiq03MBgCdk3wGcW/iYuTOCpf6cSaIqFS6NaGi0TI0oZKA3/YIBYJ3/HqHZKZLS6ytb1t8m+o04/+e9F++iFAuTORmV3pKr5g+LCbW1AhAaHHkjKM4wrtIK6TN07x/gY/NI/siPknkgCPbks2feL+7+Xg8NHWg5HEm6pSsKx7YFz6gnP7sYBiMdUs9Pv60qk/03NO45/AU1MYiwLe3Ahu/VH04Vav3Xhl50NMUKt1B3P3Feny7vhwMW99z0HsQ7216T7K+02JAD4oIxV9NTuwISAsp64P1OHPOmVjF/mp7UhUYVZKR3Fk2RaFCOYQ24JN698CmRyfi1IG5ivXcQel3qCLmIjeWsQXiZnL/tx01CDDS+qTCuBu5onZbo+h7z/n8AECeXTAH7Ao1KtXuIF76WdnWfbBR+l21h8lxg6FpGBysG29IPaJC28jjXXHej5D6UY+olDcGjgiPHI3DhyZUEjBn4ybJ/bjIej4eaF6olLpL0RhsxEHvQcVjBfYCWPSWhDNO3CGpUMm0ZCom9IoRR1QAgLYpT05MNAqDt/krmRB7MPFH/WgKKiM70XiczzHbTDpcPqaH5HFxW6vcjTa0bbvqa5Z7jkUfenqz+/bzgZ/xn+X/aXY9gIwcuP+P+/Hm+jdTWl/Cuo+BNe8DX10NxJU1FvK/TyJK0vNxxnCSivtyNSkiFgu5F1a/gKt+vAqTvpqEbfXb4DQbMITai10GA27p5sJfvudUtzu97BswAI7W7USPDAv/3aChUg+SYupH/J7sBntC072rjy9BfpoZD0wZgByHCRVxl3QFC7l/sDGIJtgkVTRZTABXNboxOhDEfbX1gE9o9ec8VQAhZQZ0jYgKl3ZrDgcbiaMcTtjYaEMgkkCo2MnfLebtikKFLayXfYdy04R2fc30retx5ZVXgqIoUBQFg8GA3NxcnHrqqZg5c6Yk49AeaEIlAcNLEit+xp/8qr7UXYrTvzkd4z8fr/o4N2mYn3EiSwPIIyriq001Yqy3i87FChWLWbFOtL4eVAoXMWY21+6P+FEfIgfgbrZu6JtOijA37xJajW0mPfQ66VdIfCIWz/eJeb2IlAkdP+IaS78uDY+dfLXq/hhoAyaXTObvz9k1p/k3AeDXsl/x7e5v8eq6V7Fw/8KUnsMjMjDD93dJHlpWsQxV/uYLHB0GB/qm98UFxxTKHpF+XisrV+Kg9yAWHVgEp0WPfnQp9hiaLx37y2KGC15QoqGATqic1OjUTvTiNmB5F5qY3jkOLJ1xCq45oSfG9MpU+g2zqZ9Gfxh+mGGPCu8ll2rC4HAY71RW4yKPVyJUnCbhezM0eyh/e1PdJsUgzM4Gd2LOUJmnJMbBRlSotDR+tlOiIX20nZ2g7O16gxrdfI2KNPVj0uuQZSefUTnb+fPRsv04/82lwtgIjU7NpEmTUFFRgX379uGHH37A+PHjcdttt2Hq1KmIRtW/y22BJlQSEKakrbPieAYXwQDUi93m7ZlHHmOUf7iL+1+MB44lJlZ8RCUsPRjJU0Hiq005DMPAv3oNAMA8YAC3ULFepJTU1YREx463JtG441odlgymEGCPsUYvESq+iI9vUU43p2PWpFmYf/Z8fLVcqBPhDrbiFAETFeoLcq3C8pjMKC8sOoHN+McJGFygbHl+3D4I88+ezwu7lrCxRphKe+evdzb/BE8V8PkVwN7fyFRgjlUzJau9tPol/valAy5Fb1dv3HH0HTi3z7n88udOeg7fnv0t9LQefXOl1vMAcFzuJMWyhmADLAYdeloDKSU7lrBGbqjZDsy/C8dQ25BOqZzUsvulsDWpOOnuUHahqOE0G+BmZNE7NqLCXTEP02firroGvFFZjUm6ldJ1fUJtVppR+Pt3d3THY2Mf4+8v2Lcgpf3pKLhUB2cTL2by3qW4tvwvTBmSDwc7MkKflsaPLfCHE6V+uq5QSZT6AYQW/Dr2OPPAnE1Ysbced3/ZtRyI/66YTCbk5eWhoKAARx11FO677z7MnTsXP/zwA2bNmtVur9sphMprr72G4uJimM1mjB49GitWrOjoXcLdx9yNC5znAwAohoFRFKkM1QhX1PtEviUc+z3KWgyATD2eMXoG0kzkoMxFVD7d/ilfgLmpdhO21m+VPC9ZPjdaU0OGl9E0bxplHjwYthNPkKwXYutUHCVCe+qAHiNxMIvCa9N0uPEmIjr0wQjMIYZvUQYAl9kFh9GBIqe064YbZvfC+cNEKSAdAmUXg3aPx2UDruLXjYekV+mlUWFInd6hnKxcEo5gKhzIt+crvVhSgDOnS5kfZwBb5gDvTwM8iU22xMP1bhlxC7458xtcNfgqPDL2Ebw07iXMPn02JhZP5B2E1aYW3zb8fsWy+mA9KIrCyUU6eGSdLrGAPCoDrDCzdTzf3w2sfAdfmh5Dmiyi4rtjM/wqM5bU4DqKJhdPxgkFJzSzNsFh1uOD2GloNIpSfDby+TT4yYkoYsnHlW4PjguIrpgz2XEBos9ZLMbTjGk4qfAkYZNJ6rM6A1xEJdcpfE9zHCbQ8RhuXf8VzlnxNcb98B4eWjELABEqVlPyiIqOTf10TaGi3vUDCCZwjYEIYqKOsM0HlWnmvwsMwyDu93fIv7aoFTr55JMxbNgwfP31123waajT4e3Jn332Ge6880688cYbGD16NF566SVMnDgR27dvR06O8gR2uDBXbMAD65/DHRSFb3bnQMcIIXRaVKkf2X9A8dxGUTgeAHo4e+D6odfjlKJTJMvFdvMvrn4RZ/Q6A6+vfx0AacW95ahb8N8V/8X0wYnrN7gDGW23gzaTKzpKp0PRW29ha/8B/HqVDz8MADBkZcE6aiQa16zAFde/gle+GAsA8JsAXfduiJWVY8h+BoG+AcEITlQz4DDr+QORjvX4cJgNuPWUPvhgKRFoUc9QNHmGIhC0AOyFPxOQpsv2RXPRG6xLp005AXp2eSX0dvLexC3OADmpypfJCUWlwoibPJ2QRlEnly9xS2gkThTrqT1OhdUgLVo+pccpak/B9Sf15Ac3AkCaWSm8GvzkNelAA9wyoRKPODG+x4X4rVpwrN1jAjwUBUeVUEtlEU1MjgI4df75CMfDWHrxUhhoaRheDlekfPWQq5PWQ4lxmA3wwIrXil7C/btYI0InSQ1yEZWYIx+QT53I6Q/U7QQ8gkurQSfsX5GzCBnmDIzrPg6/lv2atMuqI4k1NsKz6BcEYkTAi1M/x/bMxM+rGvn7g1f9zN829yxpPqLC1ah0wWJab0g99QMALgv5jNYdaMRRRS5+uUHXKa6ZOwQmEMD2o47ukNfut2Y1KFnzRWvo378/Nmxov6hYh387XnjhBVx77bWYPn06Bg4ciDfeeANWqxUzZ85s/sntyR8vAgAsUQZHr2hZQV91QNpunG3JxrRe0xQnNrWTBzcQ8IpBV2BS8ST8cv4vGJk3MuFrcV0BagW0lFF5Na/LykT+Aw9gwNffwmQVpSUoCrbjiD3/eb/H4Qt7+UnLXHcSwzCIxEgtw9ybpK3SWXYTju+dBZE/Gb5eU4b9dWT/4kGpcFgbEU1ZVhEqdoYBQqQ1U09J9bSaz4wcecdSs506OtFnFZAOaRSn0jiPlHP6nNPsPnDMmDwAqx+YwN9Psyj/7qtq1qHUUwr46+CW1/3ELTBRQmpEx9jBUEClXvq5lDiEOhPPhIfgiXgQioUU7e9qcF1tcoO+ZHBXzLVRQTQytizMXn4AG9krZMrZTflEFxt9E0VUhmYNBQUKJWkl6JNOIi75djJIU62VuzNQPuM+VNx/P4Z+RQq2++Q4cOHIQlw5thiPnDEIp/VUpjMBwFhYKNSoJGhPprt0RIWIVLVuNC6iMvPPvbjhI2HmUb0/rHUCdWEYhkn5Aqc1dGhEJRwOY/Xq1ZgxQ/CLoGkaEyZMwNKlS1WfEwqFEBKlEdzu1DowWgpz1luouWgA6rYpawyag5s4zMGleuSIIy+c3wh3ZdvD2UPtKQoEoaJUxb1++B6l/7wJoe1Ct00yAylr//5wAyiuBoqXl2HtcLJ/g7PILKFAJIZghJwMe+Uou0neueIYuAMRXPfhaqwrbcRri3fj+42VuGR0EU5qaJSsuyHSE7vi3VCQnQ4LW4Bpoo0IxcOwcBXkbLGlvLizKdSk6CiSI78Kd4fcvGW7KnqRUJFFxBD2AibyPeBmM8mHQzZHpt2E1y85CuFYHDaTXtXg7L+fT8MrDXvhzpQ5/8ZM6G0Zj8qsv3BCwQl4a803gM6LOh2NPqKU5H9OtAILARSfgNCIS4DdswAAk76ahPlnz1ek7jgYhuFTP81FqsRwQqU6LESIVpWHcd/PpD7IbtLDldcDEI3w+Sp2PM7qMwm6pa8CXiGFWpxWjHlnz+NFMSCkfOTzlDoL3sWLAQB91v8BlJwFh1mPp88VCoGfOb039rwifc7a7D644OyzYaskv/NAMzUqTDAIJhoFpe/w4HdKMAwjdP2oCJU00fyfTQeFY3c4GocnFFV4r/wdoCwW9FujMqjyML12W7B161aUlJS0ybbU6NCISm1tLWKxGHJzpV0tubm5qKxUrxN46qmnkJaWxv8rLFTm79uCg/c9JBEp9XYgRqsr/rgoreGP+PkhfxyJTqriVBAXAeBOsNzMneZIFlExFBSgaOa7cIrcc9OmnZFwW4ZC4UQ2ZGklb1k/LJtYnItTPjajMspkNuiQ4zTzURQA2FvrwxPzt+LZb6UD58JRPU4L/xc1Fy4A2FTHu6f8DyOCQbxbwUYA6nYC0ZDCO0XNEE+O/OQm76RSIImoNEofY+9X+6tRH6wHTdGtcsmdPCQfZw4nqZFJxaSgNi8Wx4ggEQm7GPK/PPUTC+UhEjFi9pTZuHH4jYhHyd+6Tif7G3BzlAwWxWe2pGxJwv2KxCOIMeSE2ZqIyp97GoDiEwBXEeY2FPOPnzowF5YM4ff5enQa7or8EwGa/W5HpPtY5CziBxUCglDprBEVOfKaDLnf0l95g3DfcddDZ7fxgze3VXow8smf8c1aaWeTTvR77kpeKsFIHFG29kQt9aMWTeSo9STuNjuSoSgKtNXaIf/aIgryyy+/YOPGjTj33HObX7mVdHjqp6XMmDEDTU1N/L/S0tRdYluC6+yzJfdvv06H0nz1dRes/oS/XelXCqyrBl+lWAYAhc5CfDqF1B14w17SwcOeYFM9YXAHMZ1N3S9Dn5mJguefQ7/161D4zjtIO2Nawm1ZhgrdNb32BNB/XwQG2oBcWy4a/WFc98EqAORKOdkXXK3TJeqXtR/GKJx3TA8UZgnrDus2Gh9UVGNImO26iUeBqs18azRHKqkfeUSl2eeIhQrnKcJ5eLA1K1vrSJFzz7SeJI0XjwNrPwZ+egCIq18ZJ+LOo+/EbUfdhncaQniwlqSa/DSNHQYD/mTby2OewciMnopo01G8g2kwEkM4lECo+NkCYoNVYdGvZtnPIRY1LYmopFmEz2zZCe8Bt6xFbVA4pNhMOiBN6CDyU0Sg+NkxAnKhIocT611FqHB1JxyMTKh4jcJvWnzCrvGEcMdnUiFPGY186rYrpX+4tA9NQfViJjNJC3e9yhgCjc5FKBRCZWUlDh48iDVr1uA///kPzjzzTEydOhWXX355u71uhwqVrKws6HQ6VMkmhFZVVSEvTz0KYTKZ4HQ6Jf/aA/uJJyL3wQdApzlRN4pB0ESh0Sh8XMzgvigjLtj46Ofn8d3u77C7cTeqfOS96Gk97h99P1ZdukriJyKnJI2Ey2JMDMFYkD9pyOtZEhHjimlVIipiaJMJ9uOPk4SQGYbhoz3FzmLonE5YXnyCf/zh2XEMDmSCpmi8uHAH1peRSIZaNb+Y584bhvH9pHUnppj0IJQR9uGZfwxtXtFv/x7H5B2DF8a9wEcxUhIqsojK9QuvTx6JoVXeUwmZ6os9vwIQUno9nD1I3coXlwNz/wn89Qqw8Ytm90mM1WDFNUOuQY9oDDbWw6SJpnFu93y4WQHy4pSrcUbRDQB0cAcjmL+hAnPWHkQ8SkRpnbwAcRPrpGuwSpyUgeQ1OpyI0VP6ZotuxQzrLqQ0/9hVD+j0EudamqKArD78/QwdeR0fJ1SSiCdAlPrppMW0EhgGZoP0xByXFZDnZDjwwvkkOpksssDB1amEDxxA+b/vhX/Vqjba2fbDLTJ7U/ttjy7JTPJczQSus7NgwQLk5+ejuLgYkyZNwuLFi/Hyyy9j7ty50MkvnNqQDhUqRqMRRx99NBYtWsQvi8fjWLRoEcaMGdOBe0bIuOQS9Fu+HIv6kSLT3hVC6sdmz0BlOvkh5tcD9/1xH65beB1vBjYqbxQu7H+hpLWWYRiJBwtAIidcN0pTqImvx2iL1E8yftpciRGPL8QVPR/HxOKJuPWoWwEArmJp9GJQA9nurhrhRKcW0hVTmGHFSxeMkCwzxaQHoWGV6i61GHUd+b/PaeT/UtKqfmqPUzEih2wzldRPgL1av3bItfyyjbUbE60OyLqEYHYBvU4mtyvJ8zwRktJzGp1A+Vpg63fC+jUJ3k9zxKOwsTU5MdmBPdPiQnEm+R58sqIUN81eg3u/3giGFSozXWnwqAk9nZ5//xxyrx4xnDhuSdoHAPQ6Gk+eTeqX1pc1ApC2204/roSfSwQADBu1CrDzjhANqjr/cnDt+82m7ToAJiL9PluiIZgM5Hfc8Oln2DVxIoJbpDYDY/UenHMUiTAlHXvAwgmVA9OvQtPcuSi77fY22PPWE6muRuSg0mlbTLKOHwAozrJJun0AwVulKaAJlc7MrFmzwDAMaaqIRFBdXY2FCxdi+vTp7T48tMNTP3feeSfefvttvP/++9i6dStuvPFG+Hw+TJ/evKX64eI3E+nwsIsvAKMRVLB1f/kNRMBU+6tR7iXTUdXqUsrvvgc7Rh+L4DZhAi1FUfyVo9jx1GJI4aRRsx3xP98GwAoVhgEOLANKVwJfXQM0KlunOa7/aDUa/RE88Hkdnjr+vzi1x6kAAFu6NBJS5CUHEb3oi6gW0pXDHbT5+6xQ0VvJgaykqULxHADApGeA2zcBY24i90UFl5zXRnNCRZxCu7D/hbz3SaknSZpQftU+YCpgZqN17JU/d8J0GB3AnBul69fvTrpPqsTjQMgDW1y99slpcmJsL2XRLhdRAYDn+o8FHLLOmqAbgZhMqIgiKgv2LcBVP17FdwNx0ZeWpH04uqcTIVXLGQWyxaFvXXY0SrJY8XzBx0D/qfjWTOqj/Iwo/J8kqtLT1RMAsK1+W6dL//hkxf4DGvbDrNfBv3YtKh95BJH9B1Dz0kuSddIvE6afyx2d1eDcaTlidXWIBzvGwZWJx7F74iTsOmUCYkkaGJKZvXF8dr30IrQogxzrmjRbfY0EdLhQueCCC/Dcc8/hoYcewvDhw7Fu3TosWLBAUWDbkQwsIMUpH54sfFzxUJCPqExZyeD2OeQA/eUOEn7vl650BHXPnw8AqP/gQ8lyrtPhkb8e4ZeJpw4n5LvbEK8nJ3zaZiOGZTMnAu9OIKmIBdLpu+I2W3En4KcrhRM4dxXH0a2RvOe46Amp5JKNsgOxkRUqpjTWHMtfr96OSNOAqxBwsAVBIq8NFzvwriHUoHyeiFAsxBeHWvVWTCohhatJrdjl9RJFYwH2xB2NBFDpq+SLpB2RsDAtmENlLlKzhJoAMNADQqeTCKfRibw0M47pIe0CYmLC32hhvBHIGyx9YqBeUZMiPtHfs+QerKxciQf/fJDseis6fji4ExJ3gvKzV9TcpFwARPRd+DHCRvI++NQPkFSoFDuLkW/LRyQewZa6LS3et/YksE5aU/LkX2/DbKCx/6KLFevaTzkFPefPg+O0U1v0Gmp1ZzUvvtiyHW0jorW1vBdScPNm1XV2VXvw7TpyoZZMqBh0NB6YIng8FWUQsdsUaD8Ldo2uTYcLFQC4+eabsX//foRCISxfvhyjR4/u6F2ScGKfLMRC2Zg3SgizM6EQjMVCC/HYrQxMYQY1gRoYaSMmFk9MuD1a1hLG1V7sahQmNqdUje2rQTxC/oS0zQaseFvxOM+62cAzPYB9fwIAP3MDAFaJhqrJJy+nsefvareQGnGkkl+npftvYo3STI4oGACmeBThvXsTb8DOCtVgEy8iOGv31VWrJbNpeBgG2PwN/Ju+4hdZ9BYU2EmnDecLo4o8opJezAuV92I1OPXLU/HVDrJdh7graADbRRVuwRV/PAas/xQ4sJxfpBZV4dqpJw2WRucYUURFR+mkhcAAEGhQCBVP2KP4zP4q/wsAWlzALdlHXqiQkwwXUbEalScqCxuJ21sXAMPVwiSpP6Eoio+GecIeROIR7Hfv7xR+G9F6pfOx0aMeadBnZcHUqxcoTyXw0T+AHT/xj3WnajCS2qb6PPlFAwDUv/9Bh9SqRMvL+dsHpqs3B1zz/ip8wQ7fbC493EdUcJ/HDkLVUj8aiegUQqWz47QYECw/D4xIPDDhEG6c8rhkvW7s+X5yyWRkWqRFY4xovL1cDKTqmaLAaEc8yk7OtVmVk3Jt2UAkCGxfQFIVwSa4P7sWt326lg/VAxBC9AAoWa7RWr4b+PZWVDYFYIqGcdvOH/BYzW8t3lULWwNCG+OIWskJq/bVVxM/wZwGcCdOdkjgiQUnwmaw4aD3INZUrVE+58Ay4Isr4Z93C3lNvQU6WsdHrJIW4SqESg9eqLxMkxMQw9rRO72s1ao9FziGTVGGUujMqNsNVG0BHssAvrke+OQC/iGbTESkm9J54TCiSB5REf5ejaFGVLNpnRiAh7My8HWf4/h0Did21lSvwYgPR/CdSxzb67djdRXxcGhdRIWckLyhKEm5sd1JNpMyPWhhi00f+W6LqPMneSrDYSQntGUVy3D+d+dj6jdTsejAoqTPORzE6pRCxVCrbqlgLC4mN366H9i1EJh9HgDgv+cOxR+m2/CF6TEc71AOutQ51T2c9l96GV9Ef7iIiIQKADBhaVQ1GIlhX53wG6prJuo6tlcmRpdk4JLRRXxhsSZUNBKhCZUUsBp1/MlhaX8iDDLPn4KiPkfh90GCeOlWR05kXCePmFhjI3+bklmoH50rtU9+57R3Utsxow3xCCtUIvVAmWxGUqCBzK4RnRCbfGHMXSc96HAmbmoYmuqANe/DHKzGdZu+xaTNi2D89AOE9yvnGTV8+hkOXHWVKIfNYCq9FEVUFZxsxEFniqOmGznxRqqTOKZSFIlqAMD/RgPxGKwGK07rQYpsJScrbzVxEq4g4Xg/W5zMneg5wz3O9VcVeerGkQ8Y1E/czih7EB55DcCZ+SUpVgUARMPAK0cBr6sXiafFhL/BnUffiVmTZ/FRtaN7pOOpc4Ygjx16x0Rc6OEQnH2XRIlCXmy14GuHHQ+Xfc8XyIonEceZOK5dKBQXA8A/vvsH3trwFgDAomt5RIUL8cfiDJoCEURi5DfA+YSIEXfF+PiC2uQtypxQ+WTbJ3zE8bV1r7V4P9uaaF29YhldoxQbAGAsKSbDLkWRPgA4f5hgblcU2YNd1R5JtCj7LunkbjH7zv1HC/f40JALFblQOlAvFfqRaOJjCkDSP59dPwZPnj2EFypa149GIjShkgJEqJAoyMtn0DBNqUPahGNBURReOUOH3weSE4qLjf7n25SGK9Fa4QqMCUmvNk4pOgV3H3M3/9xklvkSQm7Eo2zqZ/PHRJi4ioAJj5LH/XUK8RIHhTv1n2MQtY9fFozEEIzE8P3GCoVTJieEhlB7ML5sLb88sG6dZD2GYVD5yCPw/bUUTXPmoGn+fHz802N41vsGfjPdgTQ24qAzxrGPrfmJVid2yQUA9Jss3GaFxHDWfG5PkzA7B19eBfz8CLDg3+Rts2knrnOq2SJchlHa5tM6QG+G2qGzJ8OehPVmwMRGseRCJR4D3pkAzGZFYqP6oEqO00G2Q4HCRf0vQs+0npLHLxpVhKlDue8VjXdO+QRH5ZAhlB42eiIeZsh1+RQ5ivj1gOSFyK2JqFgMOn7mU0WTEB2xGlQiKqIi7CCTmpeKXR4lhDBvqSPhIipxnSDIGu4hwsIxeRIyRM0AppISYOFD0g0wjKTOKRSOYMILv+EzUb2YPksopNalSd2tw/sPbwpMLlTiHqmp5b5aIfU5osiFx88alPK2nRbyGf6dIiqdIX15uGiL96oJlRSwGPRA3IyYvwjdYkCRIwSKTRVMLp4ML3shag+QP0g3u3K+SXivcGKV+ytQFIUrBl2BH8/9ER+f/nHy4XlifLVCRMXL1nuc9gTQm50r41bWZPSgq3Grfg7mm+7jl3lDUfzjjb/wz4/X4OJ3lsF82YXCvrI1MMfGtvLpGwAI7RLqaQCg7m0hCsTE4yi/625k+D2oXEkOsDmRRgCA3hRHpZlEVKI1Ncm/xMffLtxmT2jFK94DAOxrEtW37Ptd8jQuosJ50aSbyOs1hBrUXy/kIeZyAEDRwNlkdgv0ZtSKvAGmGPPwhGMYCrnWVIMF4AZLcqmfeBwIuoH6vUDZSmDHAsBbQ9I+iTj7LZx/zXLcOuJWfDHti4SCQVzG4rIaMCCTFCS6WY8ag+i9HfSSNlKH0YGjcgWhkozW1KhQFMVHVSpZoWLS06pdLRZRJ1gQbETl4/OAfX8k3D4XURETiXX8CS1aTyIqt51ws+IxQ04u4gEhwmAoKCDt7GL+ehl4+2T+biZFBOS9X2/ElnI3xj27GLeJTOB06bKxCpBGadubyEFZRMUjFebVrKvsqQNz8c0/j8PRPTKQKnxE5W8gVAwG8l79/sS1WUca3Hvl3ntr6BoDJDoYMkCMgn//DXjc+DD0NPgT5yNjH8GWP+LA6vkYZR2IeN+h/GwcMY1fCSOw4371wks1gZOQSADwVCAeIWZyOj0bas0dTGpTdCa2q6R5vlwtdMOsPdCI7ydegpHHTYXjhkv5GpixQWmlvzz0y809AYDqp58R1ovQCLl1yHWTiIXOFEe5iRRIMoEAohUVMHRL8L7NaYDJSZxiWc+N4j1/Aj26o8JXiUA0oHpylUdUuNRPNB6FP+rn28HJwhCwl7WX15uB+yp4S38YLLxQyYtG8fReNjpFCY/zdUHxCNnWnBtJiP+s14XXqNkKLHpM/T3asoFhF8AA4Nqh16qvwxKKCtEus0HH15+8a45ja242TvYLAni/m0RwHEYHzu1zLqr91fh297dJt9+aiAoAOM0GNPoj2FJBUn4ZCdxHxQW2vFAJNgKzpgCPqH9X1eYzcR1dHUU8HOYjCpVW5QmZTnMiskNIA1GMyglYFmHJpIRC3J+3VmFfnR/76vzgmuCNvXshvG+f5DmR0lLoVQRMexApl/qnxEWFw/M2lGP2cmKFkO1QTgZvjr9TjYpOp4PL5UI1m/a2tpGNfWeEYRj4/X5UV1fD5XIdkiGcJlRSwMqHrGmEGPaHyM3kMVjRs3AYqjAfhT9vxsmPvgm9zOU0WlMD3+/CVT8TSB7uTko0REy06klEgU/9GNiraWc3cgLtN5m0KyfBhDBCUJ5Unv1xO84P/YLpAOJRCiG3HukNbjRCKAKOe6ViK1EHD61nsP9nwZtFZ2TQYMyAoXt3RMrK0PDFF8i57bbEO6k3E6ES8QMRH9LjcThjMbh1OhxwH0C/jH5ElIkGF/pZocEJEoveAqveCn/Uj8qKNehVdIKw/bk3Axs/J7djEUGkAIDexNvUZ4qKocEVvoqFCkCiKlwdwi+Cwy9qtif2WWlBFCMSk+b9xdGGv6wWxLL7AT5ywuCEitPohN1ox5PHPwlP2IPFpURQ6ik9ooy0HdSsa51QSbcZcaDej/kbSARvZLH61bS4RqWOSc1RmjN9E6Pa8dVC/GvWQp+ZAWOPlheyx9hoCvR6eFX8jnTONGRefTU8P/4I13nnAY3Nj/nIpgShtrlcuO279V/IXPwD8h58ELt+lhYRR5PVeLUhMY8Hob37AAD63FxEq6oQY4Vaab0fN88WokXZdk2oNAfnul59mP5+HY3L5UroNJ8qmlBJAXFuPQCpUAEAXZpw0G386mtkXUeujOM+H2r+9z9FJ03c30qhsnUe8MUVwNQXAUs6GAaIcV0/+jhgSScnTwDIH9asUOlO1WA3U6D62NPWd7Ed+QBDYc/3yhEA4vkj0YaGxGFoikEsLLx/vTkGvz4dzmlTUff6G806XfLvJxIEQl5QAIojUWzQ6bBw/0IiVEx2wC8SKhQXUSHPpSgKvdN7Y0PNBuz87Hz0Ov11YNBZZGVOpACA7Ep9XvlfeCyHdG9lxlROjnoLoNMDBiv5PoinLrtF78tTIfiF3FsKPC0apNkCR8ewrEBRHm3wW9IAVj9yLcdiMSPuRLMarHj2xGdx/c/X88tSMhlUIYOdiMtFVMb0UrdJt4iEyj4mD5KxygkQj5/om94XOxp2HPI05eD27dh/MfE7GbBtazNrK4my9Sn6jAxS9C1D53TAMmQw+i79C3RaGrCftIEjoxegMyg9eAAUUsJJ68fNQjRmz8gJOOaf6uaX8vRLe+FfuQqIRmEsLoahqBDRqiocvPU2WH5djM210lRqjrP1QsUfjqHaE0SOo3WCuatAURTy8/ORk5ODSOTIFmcGg6FNrPW1GpUUEIesOaES9gvFZHFxq57ouFXzyquof3empH4DUNaopMw315Naim9vAep2IxakgTgFgIHOxABOkejIVhrOycmmmpAFZchdjygoPQNQynoO82CS1pIIlSRFsVGf8CXtNroBlA4IGNJh7E5O1s3m2bmTZzRAakkA9IiQSABnrgfWCI6DS/1YRJGtPo5iAMBOgwH48yX11+o5XnJ3xqqnEGCFRFZMJd3AdQWlscIjUcEsN9WY1gMmWc0FlfqP+MwR5O/bP49sQy5U6oPKThRxMWpvl9ApZNaZMbZgLKYPFk6Cren6AYAMm/TkNDaBUOnmEk5A+5nUDB057xwAuKAfKUz2R/yHVKDn+0twlW3NZGKukFaXqf4+aXb+mM7lImF9TsBaXMq/P0sxpd7aLI6uGAqkFxXygtb2IlpH2vGNJSXQuVz88urnnsf2SqlYao3IEHuu/G9xKxyeuyg6nQ5ms/mI/tdW8380oZICOpF5mYchB/NXfliDg41EcNhPPIl/PC6yl/YtW6a6vVYfYCyikHr9bgSbyA/c6IiB1jMk7cPR6xRg4JnA8EsTbu6dtJlYZb4R42lpoV8OGkl3cB/lQdx6zDEAgJhPOEDFveT9GIqKQDukB+JYmP2iUgycxQHEGApxUxp0LlI3Ip99pICrm4gEANYZ9hI3+b8x1EhOWLIBjjXsj8NFCwfNnDqSmmrS0UDOQPXXuuAjYb9l05DT1CIq3OtmsB069XuU6wBAExtdsaQrr8DH3qL+HBXG9c3GvFuOx5c3jgUAFKcVSx7nhiaKEUdULu4vuKZynjDn9TmPX8YV4LaUTJF5YK7TxDuNyhGbfK2P90pp293tglDh/HAYMIqhiy0hUibUZIUPJB4zkYjwfvIcJs2l+rjOKe3QAWcQaHYpvY5Ysik3CswhxfL3l+6Hz90ALHoMPV54AFk33wz7hFMAAHHf4YmocFOgaasVlmHD+OXBLVtQ1iCNbg0uaPmQWPHxlfPh0dAQowmVFHGx4W0PW6fhoAL4nG0lNOTmIOufpOxNHF0QV/4DgI5tN2x1tb5T1PZctweBWrJPpjQ2fCgWKgYzcP4HwFmvAbdvwvZzF2JObKxkc/YAqeR/QP+RZHkeRa7MHaPt0MtGGRgKyYlDXKPCRVd0djuso0ep7jqtZ0BRQCmTg2ynhb8ya/az4KIin1/OR1R6seHSGBMjnhqyOTC7jeRz6WUShJ3JR64KgxRFWo/VMAknEbk5nEWtLoITUZnsSTdRZ4+bPTFaZLUbfScLhnEpQFEUBhekwc56lJSklUha2dWKTLmOJ+75HFydR6GzkB/3cFLhSWgN6VZBqBzTIyNhcWCvbKGIeS3TB3sGiOYlJYiQWA1Wfm7WMbnH8MsPZaJyVGTWpuYH1BzcKIzFduKXdP/Ya2EZL3TwUCZZ3Rfn0WNxSb5jHHE2MvbZJb0w96bjFI8vfuU64PfnYZj7D2TffBOMhcTJ+nClfuIioeI6+2yY+vcHAIT37IG/vlGybn5a66Jy951OthmN/X3adjVSRxMqKfL0OUNxx4S+YNjQrQN+yTwLA3vwiNbUIOb1Ih4IKCascpb7rRYqDqEgqXHxatRuIgc4g409QTnV603gKkStpSeCjHo3hrygNpsi++e3ZaN43jzJY1yHjjj1wx0waYcDugRTnHUGcmKsQRpyHCbeFyLe2ExEpXID+T8aJM6zAMyik9qbG94EwtKT1h62Da6nXjgpmP2k6yhIUUIrcZnIivw0UfErgLqg1HnUqjY4kIuoWNkUQFOZch3xcgsrGq6YBxx7E3DeLPX1W8D/jf8/DMkaovpYb1dvVU8fQIioAMCHp3+IN099E6cUndKqfeiRKURQjpbNJRLjMBvw3nRBWG3pI9THJDPMm3vmXCw+fzFcZhff5XUoQkWc7mnNbzFaQy5GvgyTv/uanH4oeu0V6PPyQNvtxDdFDJf6kUdU+p0OTF8A2uoCAHQ3h1GoEo2aGmEt91n/GNpBttGSyCyTZEp1c/AT2q1W0FYres75Bvpu5Ht184s34JiqrZg0KA/zbz2+1a/BFVoHox3b0aXROdGESopMGpyH2yb0wTUThgMAHJQfT8zfikY/qU/hTrzRmmrsGDkKu04+BYhIw5hch0Hc75fWtaSKqOaiYoVwQtBb2B+32CBNhicYQRjqfexB0XIbAkinyEnDT9nQwOgBUQBCTahwqR/aYQdlVBdDtJGcGL+InYRsh0mIqLjdkvECCsSRjF+fUl+FPWn9ZjHj/qwMVOnJ55Q3/9/kSp1hYGEjKiGK4iMz+OsVYSPH3iTZZl1AKlQsalf8XI0KV3fgTVDFz3m02FgDr5ITgEn/Seh82xIcRgeG5wxXfezE7icmjG6IxzZY9BaM7TY2df8eGWN6CrUaw4tcSdcd3y8HJ/cnBbL+mF6YU5RkqKPVYEWWhXx2XMv5oRTUxkUeFnVvvY3Kx5/gT+TR+nr++1j/8cfw/Pqr8vlsjdng3iTaaDfpQdM0ev3wPXov+lkYkcGJAy71Y3FJhmzi/A+AHmOEGqtAA9Kt0t/oGFo5AFBnJ9+3mDc1odL07bfYMXIU3At+TGl9OXxExSaIqLz7BB+mC3b8gsvH9sCgbmmK56YKJ1TkhpMaGoDW9dNidBbyY3SC/Hg/WVGKG8f14udyhHYSI7RYQ4OiHsExfjya5swFYjHEGhpB5yq7aVRZ9jqw5oOE+W29OU5qUfLUr6wBwB2MIpzgz52Z5gRqADv8WGa6GXaK5P8rAzT0DX5YGKFGWJ9D9pkJhxEPh0EbjXyros7uULUWBwB39jCMC03GfiYXMxwm6NLTQRkMYCIRRCoqYeyeIBoUbz5n7Y/4YQFwd04WX/wKAM54nFzN0nqYIkEAdvJ4yAN8c6PQFdV7gqL7Rh5RUU/9sGFu7u/iVbdQ58kZkPzxVuIwqBdoykczAMDMiTPxzsZ3cN/o+1Se0TrSbUY8NHUgqj0hjCh0Nbs+Z6/vDkaIYV4gnPJQR5vBhrpg3aEJFVFEJVJejoaPP0bc64HrvPOw/9LLkHbmGXCdfz6qHidRNnlnECdU/BQRFU+eTQrMaYsF4AaOLpgBrPuYRM0412Ozi59bBYB0AAFCpC3YCIqiMGNyf2w42IRMmxGTVkkjfYAwrDCeYuqn7r1ZiPt8OHj77XC2ossp7uOEihAt3dJzBGIDhiN96zq4gh5J+q818BGVJOM8NP6+aEKlpZhIusVOkYMVF1GRF5EC4PPuuQ8+AEqnh2PCBOhcLsTq6hBrqIchVaGy4F7FIp0phliIDXWcdA9wxu1JN+ENRjEzOhmXGRbDZDDwhakAUGiPAzXAMfR2XqQAQJkPeOrDNfhAdOzQid5n3OcDbTQifnAHAPIZBHdsV319OhrGPoaEi3McZlA6HQw9ihDetRvhffsSC5UUqKWBsM4gESl6hiFRkLAfiIX4dFGIosjV+/rZwgYmPSPfpDKiopb6MbOFg1xEpSHJNGiAmPG1AxIDOxHimg6OkXkjUx/R0AKuOl453yoRXDtzgz9MRF6goflZSSyc2/AhpX5UXEGb5n6Lprnf8rdNffvyjzHxOG8xwMTjvA9SI6MHwPA1QxKW/Y/8//kVwgWEsxtw6qOk3uoUkeGbxUX+ZyMv159Eap4isTgqt0QBWY2tIZ+kgEM7doBhmBYZhjHhsGrUk4nHEd6zB7r0dOhl3UziGhV/OIrV+xtw2bsrkNd9Mt7bug45gUa4VIZQtgSudT0Q0SIqGkq01E9LYU9ODpCDlZsdb69TEyoAQFFIv+gipF9IWiu5g0C0prZVL+8uM8Nz0AQmLhycbFMvT1wgyvLJigMoRxaeHDQPuPgzyWO0n0RBDJAeJAKMCbXekLjjGpReD4q9aox7vUBTGWKryPZ0NgvSpk4DAFiywtCZhe2Fb76bv825V3JTZROZxQEAhl0svZ9NohLXNwipghq9Do0yy3Z7PE72O+wDvDV86mar0QCmViSmRlwmFMOKqPFLW64VqR9LOjHeA1QLJPm6FTGF6oXGh4rcZt5AG3BBvwv4k3png2tnrvdFhDqfcGrCo01SPym0JItnWYk7+ZigIOQbYuQ7pypUOMI+wfDNVUQ68f61Fzj+TmEdLqIimzdl0NHIYuvFAPBDOi0jRoAymRCtrkaYNWJLiugHHFWZ+gwADR9+iD1Tp2HniSfBv3Kl5DFxjcpzP+7AZe8Sh+ZqVmAZ41E4D6ELCwDM7HiFoCZUNFTQhEpLYfPJLsqD0dRWFJb/ACBBRIVdLjZ8M+STqEKkolx1/WTEQhQO/pGBst8z+Rk8xZ9/Bn12dtLnNfrD2FlNrlibonrALovkhJowIN8psfEGBM8Ydy65Yjdkk/dI28n9uNcLbJ2HYD3bJl2Qh4zLLkX3E+pQeGIdaJ1wcjeJbPJzWKFiyCE5/liDeroIADDleakdPdv5dHNjE/qzwx2baBo+WX0Ffy/sBXzVMLERkRBN42sbG57P6Amc+aqqaVdtUCokFREVu8hpUT6PpuAY4Lb1wKWiabnZA6RdWW2IOKLiMrmw8pKVbZraaWsybGxExRcWZiWlmPrhTOnaOqIixyNygd1x7BjUvEYmNos9kG4K/Q8DqP2wm2VCRSxqmZhg/uciBfewyoziuBoVsWEgAESCsASrJfcBgDabeU+VVNxpYw3CdrlCYI7Q3r3YNeFUVD31NLtyDMEtWyTrcJ8XZbViR5XIP4rWIcimrwyhQxMqXERlW6UHK/YmOR5o/C3RhEpLsZOTazblxmemx/HP2ieBhv2S/K0YnVPqK8BVy8unkSZE5OcRbFAWwxoKCxXL5FS5hdixjqKEok6OkAff3TQWj58sXe5nhcr2YUXIHupGj1uJ9bzOxubIvV74f/8BwXoSSrYO7QvKYICjIASdkZFcydFOIerARVS4XLt8bpAEoxUYLoqqpBcDfScBEEzY3DQNLy0VG34uwhT2Ad4qmEU1Ji9nuMgN7sShQq1fJlSYuDDjB5B+hvKIypmvkXRQ/ghhWUbqqZGWIjZ1c5lc0NG6VhfGHg7S2VlA9SKh0tDUgK/XlCGq5lcjQhxRqfRV4v3N7/OTosUwDIMNZY2K4kwmFktthIUsglb7yqto+OxzxAPkhEzpGEzFEsw1PgCHSfa7lIsuJgbQBsCWINXLpRBD0gsFfH+39H5U2G/uuBJzk8hicMsWxNyy57PEGoRIjVyoVD35H4mvDADEg8LxItbUxEeXdHa7QtMH2KjioXq6iMcrnP/m0r/VdGGN5um8R7POilpI31+nsMnnkAsVrmsmcqD5+R9gGODjfwAAvBUmHPg1S7EKbWresrrOKxx47prYj1zBZfYBrySYOPSxAAw+qXgKsnONahzpyBrohcFM0ly8wPB44FlKuhJseUEYMuySA7y4/tQuGjPAWWZz22n44EMcvPue5CH5E/9FBvgdfwdw0acApYOD7apw0zQ/34ffd+6AGvYBNdslLc0m7rZDvXUXAGoDUqFCAVJjObOow0HuNspFrGyi7wobtm8PxPNwOFO0zgw3tLDeLwiVp+auxp2fr8f7S5P7mvBCJeLH9AXT8dyq5/D0iqcV6/2wqRJnvPonbpq9RrJczRU651//AlJw0Kx8+GE++kezQ0CNVAw2eX2GLIUDgHwnEo1LMHFCRXayX/uh5C4TEaIWNPt7irvd8K1Ygb3nnIsD1yiHWsY8Hkm6KlorTf0E1qyRPwWMKDpy4Lrr+Nu69HSF8BOESssdfsWIhQoAfL5K/fgYizO4afYavLhwxyG9nkbXQhMqLUWnzEfHg+pXMoBgp83BOTt6Fi9u/sddtwvY/QsAoGaTemqJMjff4lrDCpXRJRkocFlI2Pn634D7DgoW7iEPUCGdvcIYyUnBC4uwDkRdB+XbEXET8WLvFiKiQNxmygiXXz2ybHj6nCF494pj+OI/LoUEAO5587Dv4ksQDyndOQEAJ98P3L2TREEoCjA7SVcPAA9Nw5vdV7L6lWA/97AXqNggFSpcGkeeAmPZWLMRu5uk5m22eFxopQWknjUyC3/J/QtnA/2nAif9W/19tQHiiEq6+fBM0z0UOKHS4Avz4s8GcnJ8fN6WpMPp+GLaqB9lXhIJ+P3g74r1PlpGBM8v26SpEf43p9PBPGwooNPBPu4kIFmLvIjq558HAEla0yXveJGncABlFFMM9/fb+xuw8GEidNYKJoyLYiQyR8VCfMszZ4cQa2xEw0cfk5fdsEGx6cB66bK4qKU5tGuXahpMHFEJip7/+Q43/KxQ+b8Lh5Ptt5lQkZ6K/v3VRtX11pU2YP6GCvzfop2IqRW4axyRaEKlDfC72ZyqyhWTPKJiHTkSusxMMIEAQrKx7QpETqd6s/JAShmNikjODxsr8O4f0uLUOi+p5cgSj2A3WsnVLBcNCNQDVTLPhhgRIUqhQgRG7MBmRNhZPgZblAzm8wmRCN6IjuXCUUU4ZYDgdKuzS1Mmoe3bUfXkfxTvU3jDorgzw/BCxU3T8FlJJOHCfhfip3N/wq161no97AMa9kIvOqbtMxqwzWjg03hyLv5eSDX9e+S/8a+6BhRGY9LXF6eNjFbg3HfJ7cLR0u9B/ynAhR8LnR3tgDii4jK13+u0FRnsib3BHwbDRlQsotaWT1cktrUXR1QAoF8pg4vneRGTTfMucAkOqWKbd77V1mpF0bvvotcP38PUs2fK++5fthwAyCwsFp28xInzTRGTKO0DSH+Df74EzJomTOEGcGdE5ODLDrfkbPpji15EpDTx5yWPmMREJnGBDepigAkGUfXU0yi96WbJ8sd/L+cHT3IOtP42Eio2Y2oNqBGRc22l+9DqYjS6DppQaQ2jbwT0ZlSChPa9TSScqlanIp6sDBAbc74QrqJCsb4EUbur3qTM3XPdN/zqvjBu/HgNHp+3BQfqRKZWPnISyLKpeB1wkYY/XlR4ljgYclByM2zKg40cccZ1/vXbEfaSA4zBGiOdG6LaDmeP5EWLtF3ZLRNQuSpUJdgIJ1vP4NbR8GeRzh2bwYZ8ez4MXN1I2AsEGpATiyFDdBK/OycLTAoDAS8ZcAkuc6sYa/WU2c0P+Qcwo4y4zh5mulrqh6tRiTNAiCIRQRuV2klHHFEBgIdnx3DiSj8qZsyQrBcR1bqIhbtgXmaDzm6HsShxnZJ8fIQY2iBSvh7ZjKWISg2MLUnBuzx1WLVRENHFJwgXCoAgVOzkc4g2ehE+IKTL5A60flao6DLI90LsvSKvV+GI+3yof/99eBctkiyP6IRaHKtRh3+O69VmERWXVVl/d8J/f5EU7wKAJygco457+hfUehNEYDWOKDSh0homPQX8aw826YkvRoCNqKRNm6ZYVZ76AUSdP+UqQqV8HfDTA8DB1UD9XoS9OtTvsCEWVv6paFna5+etguGYNyT8oN0BcpurDZEQYlM1G79gd06ow6iJk33nD5RsWscyhPhCeNaX8d1HBnuMzNzxCQe/9HtfQ+59M1D81ZfK1wVA25RChUmU+lGBj6gYLfAayAGTT4NwQqWxFIiFQQH47LSZ/HP3GwyYr1eaycmHEUo9KijgxqXAZd+om+uZHID+0IyvWoNFb8GgzEHobu+OywZedthfv6UYdDQ/fiLACRUIQsWWpN2X63DysfOd2FIReBYulKxX5xOcn79bX444myYQt9o2h+3Y0Qkfk1w4LH9D+iBX9CoWwqLxFwrUJipz5oEDz8Ssq8cgyrC/f1ao6DPI97tprwVxnyCMxMcUhmEQ3EiiJvYTSCF8zCOkqaNV6hObfStXJN5XFotRh3sm9sOIfuSi61CFCkVR+O+5Q2EzCp9ZaX0Ar/6yS7Le0t3SGpvZy1s+VFKj66EJldZAUYDRhig7TCzsI8VzObfdhNyjmuAsEiIJOkcSoSKPqDSVAW+dRKzd3z4ZaNiLA4szUbUmDZ4yIhbM6cIBmDJLC2nXljbyt8XGSZxoEY9TT4jRBlz6NTDqOnwSI4PWGhj2QOonBwnrSKlhmN4Sg87Amqu52YLcfqeDGnIOMi6/HJZBg1RfiokqaxFi9Sm2Jh53G1ysUGnMHcCfuLjUAArZk8w61tiN0iEvvTc+mfIJxuYQx9YZm99EU6hJstlyUUHx7UfdLn1NigJyBwK9TkZngqIozJ4yG3PPmtslalQAoU5lu5t8JzMo4cpZzUujrMGPPTVeGGjyvB/3JbeD59KdAFDrDfOTzn9YyU64tlqxtcKdtLvEMuIo/rbrvPMkj+mMIqHy50vSJ0ZZsS32zek7MfHOmpTHCFSyaRmDFYXpVr4Dj+soSjuR2zdp3mn3hAmofuFFMAyDeFMTLyDMg8lFVdzjReOcOah//31EKtWdlKMqF1DzSsZI7luNOlAUhexcEqmJtXYivIjzRxZi82OTJMv21QkCKBiJYeaf0rS2jpbn3TSORDShciiwbYVRVqjQmz5CRl8fzBnCCVie+gGEMGysSTbfpE569YD6PYj4pFeXxoHCwVM+Tn7TQWF7IdHB3hMk+6PwewCAS2TRDqMN6H0KcPqzGN2XXC1168bWe/jrAIaBPjMTrosuFJ7iYg8WET+w4XNyO38YmsMyZAhgkIqnWFMT4sEU0gATHkXmxSSPXxf2wM22djq5g34vdsAeJ0QsLoCiMDhrMP415kF+M6UeaXfB2uq1AIAhWUNw9ZCrycIMtoah3+nN71cHQVM0jLrDH81pLXr2BLO4lJzwMyBc6ftCUqFS5Q7i+GcW4+Tnl+C571Nr65cX5E579Q98uuIAvltGfmOrq4OY/H+/4+etiX1IuEnhAGA7QTpwTydPxcZEr8elfswu4Kw3iPNxYeLojGpEhYtMGq3ItBv5i4VgE9lfOu6VGCqKqXvrLYR3bEFk9q1kXzMyoM9mJ7c3NaHi3hmoeuppeNk5Rh8NmIj6ngOQdtZZqtur7T8crw07V7LMaiDHEm7QanBry635E3G1yOVYPPi1XhQl44hrBbV/CzShcgjQbIEkw3W6LCQnQPFBTJehbGeWGKZJkF0dyIULAGPP3sLtHj0kj1U2CSd48RRSzj3XoSZU+pwqbbUVmZe9cP4w/HtSf/zn0nFkARPjOxryRDUBhgy2Nqd2B3CQnUg8QJkGk6NzOtH3j99hGztWsjxa1czMHACgKGSkkfqC+mA93GFWqLBRLtiyJUMcxZ04vVy90NtFPkdvRPo3WF9NOp+OyRPZz185Hzj9OWBikkJfjRZxA2sTXxEhKYw+9EGcO4IIY39YmpL7es1B/nZ1dXHCbXLTyuPhMM5Z9iWG1uxCSRb5bjb6I7j3642wsNEOL00iFJ+tJEL1wTFXY11Wb6zOJ87HxpIS2EaPhn3cOOizs2EZOhT5Twpzd3RmmVAJiSIKXETFYAaGXwQce4OqqSCPNROK3z6HwQa7SY96ivxGvfVstMNfB1qf+CS9/5JL4F5IOgYNdgo0O8hQ4pnCRiQ3ZpTgkqFXw3biiarb+k+2ciqyhU3RWI8m0cnAmrUJ96WlPDh1IN69gvz+vKKalEa/MgJb72/FcFeNLocmVA4BPStU6JBbmJQKaVjY3K+v/Gl8t4tCqKTgtmmfcgF/Wzyzg2EYMjuFZd76Clzw5lLc9ula3ukxYerHIXJMNQoFwVl2E24c1ws56WmCgPnqGqB6GyhRq4OpiH3+ireE7ViTtGOK0KWlIf3iiyTLIqkIFQCZZiICg7EgttaTKzpeqNC01D1W1nXD2c7LzcIO+shJscQpMmhzdgNGXatula/RKo7vQ74fe/ykRiWXasTzW09CX6pUUl8FkIgKD6NHNk2iivqo9ETNRSjrZ87E6dsW45k/30DvHOnfjBMqQbaWyGSgEY3FsSp3AGYcfwMePeYKZN9zNwrfehOUXo/CN15H79+WwJCXJ6mp0nO/cW4wpUSosBEVfYrTsXUqbtEcRisoioKHJkIlxEZUULFOIlQyB3qQPVSISsW8IdRtJd9xfayM929Sc7L1sVO8qxOc8/c7lfU1Rj05dRh7E8Efq68/5DoVMVydkkf0XWgMCDs4YQD5vBpUoiwaRx6aUDkU2EnKxqhH4p0gPoAYVLoKVB1Z43HgkwsV64qxjhoFy/DhsB1PrnCcpwupCG8oKmnd+3rtQSzfW4+564RQuWpEBQDsoo4Eo7JzCYBgXrbrZ+DDswB/PbKHumHNCcF1zlTl+maVvHsC7KecguKvvoSZLdKNVjVvCw5AdZaNU5zvFxcwyoQTV5QpjqhU+6vx58E/AQD59sRmcBqHTradRDT4+ieWR/XvwycTKvKQvy9ATqxWWd11mDVj868T/IAK06XfEU6ocG21Jj2Nao+woYhOj/h5l8AocnwWfH8EoWKwsfvIpW32LgE+PAd4f5pg3JaqUAGkvjxi2JEBXj2pPYp62ZTQpm940zkAsGSGkTXQi9zTlWMaaD0DY4/E3U0+9jV8jHA6cFxwIWrNaXhz8BnwGxK/D53dznc7RlL83aYCNz9J/F3gIirH9EjH5MHk91mvEmXROPLQhMohoGOv0k1Rj6TbxZoTRvrIbOSdmgbKoyxMo20qEZWqTcJt0UErKp4TxF4VdX/1FRR/+SXsxx/HP9bga/4H60woVERtmImEijjq4qkA/HXIGuhFjykMdN0HKtdvwUGaoihYBg3ihxRGq1OLqKjBR1QAqVBxSoUH19LLFeECwCN/PcLfzrdpQqU90bNDJCshbafOpJowZ125pKCWEyp3nUqik24fO7JBJlQ2710GAIg0NvLLuqezEQ+Gwdm7luCybT8BADzs99yooxVCiPMKUSDqCKtxufBGwVOCUPn2FmD3ImLaVsYO9WuJUDn9OcCUBuQNhSQNxArqgMEFAOR4wjCAt1LSIq0zsl1NOmVRK61jQOl0Cd13vdz8JNH+Gm6+HZdNehBzegvpoFEl5G/11DnSjjd9HvmdJeoiag3cRVWVO8RH1Dih4rIaBXdjn9ae/HdAEyqHgN5GrnLSozXAlm/55RQF5PVaj/TMrcCnF6HGE0K1KHytWqPiq0Y0RKNpnwUxRxFKAh9h1uJToBf7IrCe9LTZDMtgaSdNKrnaHGeCA6fYjEqtsA8QCko5qtnBZbYsMoQvd7D08RaMnufghivKbb6TkWaSFhSnGUX3xRb5Mrt8LqLiCQsHdrHDaZ4tSTupRpvw+iVHIQYdHohM55f1pQ/CiAg+FrWdch07gwvS4DTrEY2Qv51cqFRW7kFw2zaERZOPC1zkOz+kbg+u2/Qdv3x5HhHXwUhMUfuwtUK9g8UydChoAwNrTghXUPei/4n/UP+9lLF1WkkiEQq6Hw3ctRW47lfpuAXWHfqgldTOZB38hcwEioUlkdvb8U8AQDiu7JqjdAwQ9qHguWdVX5qLLjUU9UHuffeh6IP34YNS1Hx09Wj8de/JuHCkdL6YIZccP1TtFlqJeCL1Y/PIsYZLbbusBt6LZ9NBN1bu04YYHuloQuUQMLBCxc54gcVPqK9UsR6PP/UoTnr2V4TYAlcdO2lZIlTc5Sj7LQPly9Jx8PsqvLTkZYyuklbSu/7xj4T7UtWMS+Os6SPhTFSjIk79JHBrRUax9D7nu5LZhxxMb/wT6Dk+6T40h87JfS6ptzq+cvIr0FPkoDYkawgMIlMqSURF5mPBCZXX1pGpuAHRwLf3J70Pk675GUoah8bkIUQ8NjHSKN5oeivW7CeddKv312NvLYl6ZdqNKMm2I+ohJ21rSFqjMn/TF9h78SWSZXlzib18rk84mX3S9xRsSyepEE8wKvEfAoBnFmxTGInF4wwYhxN9zqpF0bg6hBgDemTa1IUKJ35bElEBSDST1knnibG+QHvTj0OI0cMarAJ+fQaAtFa83ECe47K7kXbpKZLN0joGqNkGU//+qi8bZwd4esNRZFx+GWyjRvFW+RyjijNg1NPo5rLIvIUAU3/y9/CvWN6y95sEcYfibnbye2k9qeHLTzPz7sYAcN4bS+EOaimgIxlNqBwCJkdqnhVPGd5BOBJGNTvFmJ+V4/eDibI52MZSBOrIj8+3NYi+jdKJpiVz5yr8S8SsPdCYdB/G9Uti4Z09QPRC6pX/KBL5KNhygNqd5LZ4srEuBZ+WJHApsaTTlGWMyBmBtZevxZpL1+D9ye9LHxRHUdKkV4Fx0cTEan81NteS8QFG2ogROSOgcfiIyw5DFoT4q2exwVdhuhVWgw5MJAvTe/0H/+w9XfI8cxiAbHaN8cN3MbpqK0wxsr0/ug3BBwMn8xG/en8Ys/7ap9in79YLtV0Mw+D8N5di0guLQesioGggDANJP6h5oHC0VKhwiOdlWcgxxmq1YQ/Dpl+XvcbtGL9auYHUYFmpENKdq2HJEoQWpWeA7T9An5HctVjs+iovaL5odOIp7Xa2ddu/anXS7bcEk17Hp3cG5DsRjsbxKduh1SfXgQy7tBVf7JujceShCZVDwOxIrbPFRoVwq/4b3ttB53QCenLFEK2uBqJhoGJd8tfq1xeVTUGc9dqfGP/cr9ha4UZ5oxAF4DxU1ApmT+qbxL4bIGZUx1wN9JsC9DhOfZ3i40mbLkA6HLxs4Vy26CptBOuK2u0otAZewHlb3j1g0BlgoGVCSdyl00PaAj21l1AAXOOvwfQfyUkvHA8rrhg12g+jjsZBRvo7MiPC142U1pPv+DlHFSDdZuSH13U3D8cQszQdaUlwrrovrRq3jCWeKHm56fjmn2P52pU9NcJ3Lc9pxpnDiRhYvodEYL5aXYZL312OVfsbUFYnCIi4zkhqvsS1T/LJ6q0VKlaRoGC/iw6zAduZ7pLVTC5yPCm1Z6OediAC8tu31G+B3iIIcVoHoGG/qku2GLFQ4VrEe2bZ8MUNY3DW8ATFvhBsEiLV1QoL/0PhDrYmyR+OYvZyYUxA31y7xMEWgKIAW+PIQhMqh4DdasKBeBIRUCB4cZxGr+QPvpReD0MBOSCGl88D3psE7Pwp4WYMT5BQ7wNzNmJdaSP21vow+f9+x9inf8FWtvCPa93rkSl0ORRlWPHfc4fisTPVnWF5KAqY+gJw0ezkFvBcHUo0IIS3xW2VA6YB1/4CXPGt8rkpoHMkaNtuLX0nA4POJoWKBulcpEGZgzAok3wuNQH1mSca7c9H14yGO2sYdh39ELgiUhMVxrZKDxZvr0YpO1Dw+N5EzJgN5AQVisQUKUJLWN1XxLjgOzhrSYTkmH75GFGUjndYnw6xMVy+y4wJ7NBMLqJz1xfrsWPXLjytfwvH0Dv4da0W0jYMl8jLqN/pwiRkoGU1KmJOf4781i6czS9yWvT4MHqqZLX0f5wJy/P/h1vG3Q6jXo9qnZC21dsE0U7pGMBfqyrAAyKTQHEUxcua7uU4TRhZnCE811tNpjuL0Gdnk2NIJIJYg/SxQ8FuIn9rXyiGpXtIZM1m1KFfrkPxXsQiS+PIQxMqh4DdqMe/otcnXiGjJ352nAUAOMhkSXxOjKz19IEZLyK4aT08ZeoHteeOuhDBMWQA3jqRRT7H3HXlqPGEeDfPogxBqOQ4TDh/ZCHJpbcFJiffhQCAzAUS5+gpCig4OnFBbjPQifxlVAiXliIm6u5QRW8EzptFPFBUyLYSkXnArc0L6ShGlWTgl7vGofe0u4ABJMplAhEP099bicqmIBxhH/LZQnBOqAQjcUWK0BwGGl1s94vMQK3pS+JiTFvI7yPHofy9PX3OUH44XoM/zF8EPGJ4Hxfqf8VHxqf4dZ029neWLhIqOQNI5JEjRS8hBflDSc1X/ynC65kNWM30w9z0K8lv8KLPQJ/zKvwjjkVIb4LDrMdam/DaunThN0jpGH6qedGsWch96EFk30Zca58/6kIY2Q4s8fHJz4oWyVTjQCPwXB/gVWkKmjIYoMsi0aRIZdt1/nCv7Q1Fsekg+Vu8N30UL1I+ufZYfl0tonJkowmVQ8Bh1mMlBuH68O3CQlEtRJ0xH3PqyH07FZR0F1h6Ce2++37OQtkf6vnjkM7AX+mIR9dzfLvuIEY++TNfcHhcb+HgqDqE8FCgaXIw5nAWtKq7J+HmU6xRiZSXY/epp2HPmWcd0uvlWEg0iDOLA4DnT3r+kLapcQiwqRJOqABAyY7V+OSHR+Gc/Q4A8KmfYCSGiGyqtTUEuBrJ9/HZcRfhp9OvVrwEbSGv4ZL9NkYWp6NfnoP/zeyo8mLy/5EusL7UQcjJ4oRO/nBhYfdR0lqubsPRVnAp3U8tFwH3HQT6TQJoHV9En+s0Y6NrAr++3ilcsNA6hp/TZTt2NDIuvhiZN9yAD+5+HX8WDEW/PCJqDjYIqWQfW0wrGRB5YBn7YA1JV4sw5LItys1NhG8B3Gu7AxG+86tYFDEe0ysTx/UmAqm0wY+nftiqGFqocWSgCZVDgKYpZNiMqGFcwkJRzcb6YC684KbDBrByXz0/BC3rokkwZ5AfOxOT/hneuOwx/vYuV3fUecP495cbsEE0y4ejvEna7TO6RMiTNwbaoRI+V5RGOuv1Nt0017YdrahAYONGMAyDg3ffg7I77pDkvj3sjJJoVVXSoXLNwQ3w29lACoO727vjtOLTWr09jUNERajc/ds70DFx0LNJobRJz0ZUojGs3UIKzr1G8rxT1gvfhRvN38GWLm1dBwDKTMQ+LRtmx50UXRZl6pOfHi6CK/REeg/gljXAtYuBwpHCPChzWmITt1bgZAWUJxRBjTeM8974C1+uLuNP4N1cZjQ6+vHr62khBUPpGYTd1dhTLQg7iqJQrSe/twH5RKiUiYUKF1ExiWpBmkRzsWSOzpwHUmivdGjgocD9TfbUCnVEWXZpNx4XdXn0uy14c8keXPT2sjZ7fY3OgyZUDpEsuwnrmV6iBX34mztRBB9DDnJWhDBvQwV+20lCsFTEB1dPdcv8eEYGei38Ce9c9CAqbZl467fd+GxVKVI5J2fahAPt3tqWF6U2y3G3Af2nAuPuIwfmNkTclVB2y60IrF0H97x58PywAOE9e/jHYrW1/O14UxNi7gQGXc3AebBsb9gOAChwtN2JRaMVcEKFStzBYWIjKqFIHDWl5Orda7Mq1jvKuBMOlzIFSVsE0XEWWzhrNepw6WiSwkmzKqOQHiaJUAGAzF5AAVtAnt0XuG4JcP1vbRpt5KwF3IEoXlu8Cyv3NeDuL9ZjzQEiSLq5LLBbDHg4cgUAwDTlNv65UYqGERHkvd4Hu/fs4s30uLqOAfmkyLbSHUQ0Ri4IuEL9bLEwaNgn3A5Ljy2m3uQYGN61uy3eLgChRkWMXGCqDlrVOOJoN6Hy5JNPYuzYsbBarXC5XKrrHDhwAFOmTIHVakVOTg7uueceRKNdK9eYZTciBh3+GPU6MPIa4Pg7+cc2hXPhYyMqdor88L9Zw7Ydhzww2NWnn+rsDhgLC9FUTKred1anXlxqM+n5gW/3Tlb3TTgkMnsBF34MjPt3m29al5aGbs8/BwCIVlai8pFH+McCGzbytyOieSV7zj4Hu04+BaHdLT9Aukwuyf1pPZsfpKjRjnC29lCPBAa3b4dZFFHpDhJN7ONSpmZoPYN0l7I2i0v9AMCLFwzHlscmYstjkzBhIClEdZiUJ74QpOLl7sj1kgsCBd2GS03b2gDOVdodjEiKXrmBjQUuC+wmPd6PnYYnB30Hw3gh7bUuRObxWJkAVs28Czd9vIbfFgCUZNlg1NOIxRm+VZsTQL3Es5L8ImM1uVDpQy7QAhs2JHwPcb8fDV98gZDooiMZmTYTdCJhctVxJYp17Cp/r0OJsmp0TtpNqITDYZx33nm48cYbVR+PxWKYMmUKwuEw/vrrL7z//vuYNWsWHnroofbapXaBu+L4gzoKmPI8MU+7djFw41KUNkZ4oWJjD6q5aeyBMuSGXmVMe4TWwWxlxQ17RSE3X0qGUU/jnon9sPjucTjv6O7NP6GTkTZlCuwTiGFVaIfQZVH/wQeIh4g3RLRG6NKJVlQg7vWi7u13Wv5aMlfbkjTlgVDjMCJP/chOOKXXXgezQYfMQBMce7bD6msEAFjTlREYWs9gQKFKOy4tXKVTFAWrUXqio2kKEwbkok+OHSvvn4Atj03EyHxBqHgYC76MnaTw8Whv+NRPMAqrURlpGNI9DdkOEwAKe3wWUDod0i+5BHS3AszLEepm0igfFm2r5rcFkFq2cJREUp6YvxXF987HjipycSQZ6hhILFSso0YBej3Ce/cifEC9OL3slltR+eBDqHzo4ZTec7rNiJlXjsRjZw7CmgdPxUPTlKM6clXctgOR1I+XGl2DdhMqjz76KO644w4MGTJE9fGffvoJW7ZswUcffYThw4dj8uTJePzxx/Haa68hHO465j0n9CXFq5+sOMD/2FFwFKotPbGhrJFP/dipICjE4ebqRkIeyZRlDo/Byh88bSpXCwDw1mVHI8chhGRP6CPtLtDRFEqybF3WD0RnU14Jh7ZtQ8X9DwAAYnVKy+y2iKhkWVrZpaHRNvBChfz+TTFpZCVaXQ2zgcYbi57FGW89iHQP+R6YXcoIDEUD2Q6Vw1u8+ZPY25cfjZ/uOBHZDhOsRj1cOqEOzMFGRpNGVNoBrsg3FmeEY4iI4YUu9MwivxuupiPvwQcQ+eBLzNcLQsVFEQFS2RSEh42oJJyqDqB/Hiv26nYDOxYID8hqVHQOB0zsJOXwvn2K7cQ8Hvj+JAM//atWoWn+/JRStif1zcblY4qlqTYRpw5UOmk3aIMKjzg6rEZl6dKlGDJkCHJzhS/axIkT4Xa7sXnz5oTPC4VCcLvdkn8dyRnDCpDtMKEpEMHyvULF+ZoDDYgzQGGe4LNyiW6R4NsQdENnUgoVr9HCF7CphTUB4MS+2bj55N78/dsn9EH/PAeuGNNDdf2uBi0TKjn3kjSTe948RMrLEa1TVvYHN25E3Tsti6rIhUqmJVN9RY3DA+s7kmUmkRRu0rEYR3017FFpAbkpXXpiyh9LBAwN4YIn6+ab4Zg8CY5Jk5vdDYqipCI/qDzGZNgO74gFs0Fwat1cLt2fly4YDqtRj57ZJPpxoN7PXzTV+MIIwYizQ48CAAopEk059qlFcLMRFadZj2GFLsVrXjm2WEi9LLhX+mBYWf9mYI/lai3KYVm6p/yuu1E+476E7zdV+uY68MCUATiqyMUva/B1nQtdjdToMKFSWVkpESkA+PuVSXrxn3rqKaSlpfH/CkXj2DsCHU3xU0V3VglXGVwFfbecTH7y8In0BpFQaQStAyiZGPEYrLAY1YXK6JIMzL3pOJgNOgwpIGmLUSUZOKooHQtuPxGPnikbDNhF4dqUASDzhuuRdsYZ/P1dJ58iaYFMv/RS/nb1c8/Dt2JFyq8jTv2YdCZtvk9Hw0ZUjismf381oTLonisl9zMHeqAzSFNEVDfWWHHzJ/wy13nnofuLL0Jnb4WnkCh68GaUeJskusJvTzh7Aq5m7cqxxfjqxrE4awQpAs91mqCnKcTiDG8uWcOO7ShniAgvoOpwnu5XyXYdZgNeuVA5NkJib+Aulz6oIlT07PE7WlWteCweCCiWeRctUixrDdec0BNf//M49MslxdMNKQxo1ehatEio3HvvvfzVRqJ/27Zta699BQDMmDEDTU1N/L/S0tLmn9TOcHUq4kFmXNtgd5cFOJ+0Vh5F70QT9yNiLeh1DmnHgtdg4Q8Q8tTPc+cN4698RhSl449/j8cn1x7bZVM8iaAMwvvOvPpq6BIUYxe9NxO5998HyiQIjOpn/pvy6ziMQleInta6BzoctpjWRpMrfauKUBHzc+HRyBhCTphNZkGABEzk90Bt+YpfRptEwmL+XcAiwQKgWcKkO++eyHV4LnoBgMOf+gHA2/5znNg3C0f3EOaNURQlMawDgJl/knbhGrj49Z41vMXf1tMUzAYaRZlWzL1JOj5DIlSsMp+nsLLAX5/HRlRUvFTifqVQaWuE966lfo40WiRU7rrrLmzdujXpv549eza/IQB5eXmoqpJOLeXu5+XlqT0FAGAymeB0OiX/OpostrBOPBiLM08qSLcA+cMQp43Iotx4qeEW4LPLgF0LAQD6NOn+ew0W/iAoj6jI5/h0T7dKquKPFJiI0NVA2+2gaOXXlLbZYBszBhRFofBt4cAbOajsAEkETQnb1YRKJ8DAivawD/934XBYZCkeOe+MmAo9RVIcT4+8BI02Ci9Po9HUkzg560xxOE8/Hc5p06CzGklxbsM+YOU7wO/PK0zLVGEYIEKEyq+xYfw8nTY3U0wBueFj31xl+zW3Xz9urkR5YwDbKol3Skm2dF0rW9zvMOv5C51hhS68cenR/DpO8XuUR1BUhArX+eNftkzRecMElUKFMrat2EtnJyo3ahGVI44WCZXs7Gz0798/6T9jil++MWPGYOPGjagWtZouXLgQTqcTAwcqq7s7M5lsRKXOJ1wBcqmfApcF0JsQyhkKAOjN7AO2CrNw9NnSqcYBg4nfnjyikqhm5UiDiQhXRImiReIoim3UKPT6+WcA6iHmVNBTf4/PtlPDTgpGoAFnDi/AzPHJh2naaPJ7CzM6rMvsg3vuKMQfg2l4RpCJ3pQ9BwUvPI+CB+8g1u9fXQ2IC3SDSgNFBdEQAHLSHdRDuICS+3kcDgpkERU1p2outfzSzzsx9ulf+OWfXz8G20xD+fv9KdKZM7Cb9EJpYL5w32qgge//RYSdh03Hc068IZFQYRjg9xdg784ABgOpIyuXpoq436X4d2soaFvfonR2vlGDT4uoHGm0W43KgQMHsG7dOhw4cACxWAzr1q3DunXr4GXt0U877TQMHDgQl112GdavX48ff/wRDzzwAG666SaYTF2rVoCLgNSwEZXPV5ZiCzsnhDu4UJm9VZ+rz8+X3K+wZvL5b5vM8Eiv+3v48zEqXjrFn32K9Msv4+/HmqQnGdpKPmcmFGrVBFctotIJ4NILrN17cBGJOjomTVJdPY0iV/leyg6AQrbNBQBwg/37h1gn1q+uIRGATV8BEZGQTUWoRARTxpnXnIgHpgzArOlta3SYKtmiTr/bJ/RRFfG1XvVoQobNiP53zEcjQ1JkxRQRHvefLr0oLKxaiFcN/wc7/MipXwWseJOkyjgPFVcR+X/J08BPDwLV24BfnwIWPQr6s/Ogc5G6L3lHTzxAIjj2ceNQNGsWu7DtJi0DgIuNqGg1Kkce7Xbme+ihhzBixAg8/PDD8Hq9GDFiBEaMGIFVq1YBAHQ6HebNmwedTocxY8bg0ksvxeWXX47HHmtB7riTkMd6o5TW+8EwDP71lWB6xF31GBzqra+6DGlB8dL8wQlTP38X0i84HwBgO/EEfpll2DDk3SfqEohJ20xps+CnwLQiqiKuV9HoIKxs15W/HmAYRBsayeJR6sKAEyppGdn4/tYTkGsnERkP2O9GNADU7AD2/yE8qalMuF29pfl94oQKbQBtMOKaE3piXL+c5M9pJ8QFvLed0ifJmkooigLMTnwfGw0AeMH4Bo6lt6BntrS4mPr8ckzVLcf/Ff6GEeKAVpT9TaWJvJn+ehn432hgyTP8Ip2DRGRisjlM8QD5HGmLBTo23R3zt61zdoYmVI5Y2k2ozJo1CwzDKP6NGzeOX6dHjx74/vvv4ff7UVNTg+eeew56fdc7OffJcYCmgHpfGFVuaQEg51Ggs6m3vjIx4ari38fdgEheN94um5trAgDd0pTGRkcqpj590GfpXyh8XTlLyMB2ecnDxpRIqMSDyWsbxDw05iG4TC48ftzjkpSTRgfACZVYCAj7EPeQk50+W5kCqrK4kAZyotNZ0zGwmxNOIzkBrqrbjFqurqlaZnVQtUm4/fllQNlq5X7EY0DFBvI/W0gLo9Km/3BzbEkmzj2qO+6Z2C9hSvSBKQNUl3OMHSmIvk+NT/DTqOWc0i0CHSV3eKUAR77q+hw6G7kwi3ukERWGjajQVotoSnrbChWtmPbI5e+RS2hnLEYderEeBlsr3XxP/9Shoh+1VV2oZFx5BSrT8vD6kDNx9lVn4LPrx/D5b3HB3o93nNg+O99J0aeng9IpD6KFb74Bx6RJ6P7aq5Ll4oLbyieeSPl1zut7Hn674Df0qmCwfeQo1L79dut3WuPQMFgBrkU8UM8LFUOONIKRfccdWHn1DDjZiArMLgBCVGzOnm9xRiE7nbxJVlxdvVV6f++v0vtNB4E3TwTePAF4LAPY86uwbx0MTVN4/vxhuGm8ehoZAK4+Prm7cnFREq8lcQEsRUvrUAAyaNGUPPJIs0MdPb8sRlDkLM3XqJgtvE8SEwiAiTVvwJcqWjHtkYsmVNqIHuz48YMNAd7y/oKRIo8XeXsfiyEvD7dOvhff9joBJ/TJ4gUPABRlWvHSBcPx0dWjk7pH/p0w9eyJ7i+9CHP/xHOMPD8saFGdCkVRqHrmGTDBIGqef6EtdlOjNVAUYCeihGkqR8xHhIhe5LdkKCxE1vXX4Zbrp+DaY9jiW4sLAJBvFy4MPDSNRpoG6mWOxQ2y6b7ybpbt30ujLj/cw76wsnC1M0JRlCKdI4H9rFSp3SnekrKGx+ICjHYkQ2cmp5Smr7/G3jPORHA7EStxtuuHtggRFYDM/2kruGLaOm8Y8bg27+dIQhMqbUQ3thaloinAz9CQ1JhY1WtUorE4vz5XDCbmrBEFOL6P+nM1EqNm450MitJ+Cp2CDBIRYCq3A2xRNW0XruIZdryG2aBDXyd7Nc5GVPqm95Vs6iebVXbyBVAvEypeqUVCwgJbQyuM4joI+WDFVy8WmblZ0qFKoBF4TVQLFHIDwUbpOmYXYGzmc4hLU9/+ZUsBAIyfEypm0EYjYCCiIu5NfeBqc3DHz4ONAQx77CdUNLW/d4vG4UE7OrcRnFD5bGUZb/YmESrdR2Jp2un4OSY6aEx6Go2iuR2uDvBmOFJRM51KBmUVrpjVuo5SgQmHUT7jPjTNm9+q52sAyCCTv2MHt5P7FMV3dAGCUAEABMiEXy5K0C+9n2RT39ltQPk69h5b0yE/+XplLqoq/iAAukxEBQDsIr+lK8cWY+rQbsKDrKhTULFOet9fR8SLGFuCC6aR1wL9pwIADHbpKSVSSYQgVzdGWcjnqLOSCHTc13Z1KhmiCz1PMIoxT/2CmBZZOSLQhEobUZhOfnhid1rxAQM6PepPeQHXRO7ByOD/8OPU5cCxN/L5VIdZ/7dpPz4cVD32OKpbkMYRR1SiMiPCVHEvWICmb75B+d13t+r5GgCySUovvmclAKXhn6Tg2c3Wn9hJaijXJu2gc9M0EGa7TwpHS1/HyXavyGtYuJbmsbdIlydI3XZGxBdI6fIorTz1ww1p9NZIl4e9SlHX6xSAEdWUXP87cNk3wJTn+L9b+mhp4XOkklww8F0/ZiJU+ILaNhQqTpULvW2VHTsLTqNt0M6MbYRaekbeXnz6EGIYVQMXGuJE2HAV6ooDisYhEd6/H3Vvv41oQ0NK68caG/nbfraFvqWIr/bb8gD8t2IAuTKP718LAKAd0poIiVCpYjt6cgfxi6YPns7f9otN2QYK86IAAONnkP9rt7OmbixcAaktGxDNgsIA2fMPE3KH11Swm4QTNle3wSNP/YR9wPy7ga+vkS6PBJURlUFnAX1OA3ocB5xwN5A/FOh1MnnMQY5tBkr6e4uwxm/irh8AoG3k+Bf7TdnZ11rUXLqX71FOWtfoemhCpY1IsxiQL2shthmlQoWiKJzNDhBzsyPWuUmf6VYt7XOo8EZSIlLJgTPxOMJlgr9G+b/vRdN381q+A7TQpRSSTYvVSJG07oA1E7EIOTTp2AGVNDsqwzyYHbwZ8gBN7JyvHMG07LYRt2HmxJkAAJ+47mj4xcBxtwO9JwD3VQDDLyFpkHhU6qfCRVRMDmlLMndCPoz4I36cMecMPLEs9S42QDpqQ2H1b7BIW4xDbmClSqdbJCCNqAw6G3B2I/OYpn8PnPKgdP00tnGgbpdkcXDjJkTKy4WuHzb1Q7ODJOPrvpF2G7Ux4on2Gl0XTai0IbOmj5LcV7PZ5g4inmAUO6o8uO+bjQCAbMffxyelvbAdOxquiy6ULIs1NR/6DW7YgFhtrWRZaNeuBGsnRiyKIgfLk6ypkRRHPuIR8tuhHaSQtviT2XBdcAEKnmWHTrLutTBYJekMHa1DkYO4p3p0NP7i/HUs6cCpjwKXfkUECEUB3dni0X0iQzguVWR0SGsynMn9Q9qDBfsWYJ97Hz7b/lmLnicWKqqR2lvXgq/ZkQkLDGenkUf8QkTl4i+Ac95J/qIF7IygGtlQ2ngcDZ9/LnT9cKkfM2lDj0cpYO1HwM+PtrlTLQBsOqj8/cfiDH7aXMlfLGp0fjSh0ob0y2ve3ZQzc3MHIvjH63/xltdJWwo1UkZnl6YK4u7mbdK5gj8xakPUmiPmFdw4D95+O/ZffkWr7Pz/9jjyREKF/D1NvXoh/9FHYOjGFoZyJ1FzmuLpNlGHzvX5Odhr0CvWAQD0Gk/+3/u7sIxL/ZjswNHTSS3Lee+3+q0cCnGmdd8dccrZpRapNVj4uh5Uydx5S1g3aHFExZEL6Jox4rRnAwnGhATWrBW6frjUD+u3Eo/QwLc3A3+8AGyZk/w1miPQiDczZuNoaju/qCmgFCNvLNmN6z5cjYfmbFI8ptE50YRKG3PaQHIAGF2iXnwnjqi4g0J3SUmWJlTaAnErK6CcCaQGEyL5c+vIkTCx/iyJxtIH1q9PWH8id9r0r1iBaGWl6ro1L7+M/Zde1qY+EkcKpV9Vo2IFqaXgUj8KuDZiFaFi0Us7dDYkmh2WP4z8z0UBGEZoVzbagZFXA3duJrUZHYCOElKJLalVsTcXUQGENmN5BIQtipVEVBJ1CskpOhYAQHOeT6zLeMzjEbp+2AgXbSKnnliYAhMHmDiA2h04JH5/HhP98/CV6VF8dhnpAPOGoojGpILv2R+JkJmzrhz+cOs6/DQOL5pQaWOeOmcI7j99AF675CjVxwWbZ6l74uBuygOuRsuRF1+mkvqJh0Lscx1IO+tMAECkslLRpuz+/nvsu+BCHPzXvwEAwe07UP/++/x6avUwanb+TDiM2v+9Dv+qVfAsWpTCu/r7wEQi8G4V0nCUJUFKlBcqLsVDOlrqaFyj4nAMAMhi25kb9wOLnwIOLCWdRHqLpEC3oxDb5IfjqbutGkRdUmmJat+4+huPrI0/oyd7gyGjDIDkJnFi8sh05uJr+iDjisvR/eX/AwDEm5r4GhWabUs25ZALimCDAWV/ZGDHnDxED2xT2WgLaNzP3xy5WajrmbOuXJLmEfvM1CUY4qjRudCEShuTaTfh2hN7IsuufhXHLRdPOS1wWTCkuyZU2gLLkCGS+/IprmowQVaomE2gLeRA6vv9d5RefwN5PB5HuLQUNa++BgDwLlqESGUl9p55Jqqeehr1H34EIIFQUYnMcG6dABD3aREVMfGQ9MQRq0vQtcGlJVQiKnIqi49Vf8CWJVj2L3ka2PUzuV00ulO0I9OiYuBAJPVUZFTkHSI3f+Ph0mNiw7vzP1COCnB2B0zO1F6YjdKY0mnkzpgBYwkx74u53fygUG54qLUXGSniPWiBt9yMeJhGYLd69DFlRGNK6C3fwGokAvXuL9bj2vdJJx/DMPBHhBZrzkVco3OjCZXDDDeqvcYTgtlAPv6Prxmd7CkaLYDvCmFJpUYlzqZ+KJMZtOgK3vfnnwCAqqeexu5TT0NY1MnT+NVXwnp/kGJMNVEUV5kQGyk9INwu//sU3UYOHmx2tgsTljqbRqoTeNokSf3I8Wb2Un+AoiSdWvj9efJ/IvfWw8iexj3YUifUj/ijrRO0iYYXghNBFevJ/6NvBAaeSWpRdKJ00cAzyOeUCnr2t8OKKh3bqSUW8DTb9WPOM0FvlUYsY55DFO3i/dYZJSJk+d56vPfnXoSicYkJnE9L/XQJNKFymOGESqU7iGCE5E7TbZqHSltBURRc553H30+pRoWNqFBmE98+yREPh9Hw4YeK59S+IgxFjLFeLbF65dW/+7vvFFOZY6Ial8jBg/KnHJF4Fi/GrlMmoOK++5Oux4SkQiXziiuA/X8Bm+ewG6oCdv8iuNImECp6Sogk+KIt9LRJtSajnQjHwjhz7pn4eOvH/LJANPWIytRh+ShwWXCheNaYnAN/Se+bRClTsQsvnwpKAe55USL8OaEihrJYgK3zQP3xHKxZ0t9FtDEA1O1ufbtyUHShkDtY8fCyPXWKCMo7v+/Bn7tqFet2BV5etBMnPbsYu2vabgxBZ0UTKoeZTJs0JURRScKzGq0i75GHYR83DkBqNSpcMS1tFFI/HNHqGrWnSNdpJCfNqIpQafziS5T/+15U/fdZ3ltFXIybSmrqSKDmlVcAAE1z5yZdT2yaV3JdXzhPnwS8Nxn44gpyEnt/KvDh2cDyt8hKad1Vt2MVpTD8kRZeqadak9FObK3fqljWEqHiNBvwx7/H4+lzhyZeaczN0vviYYPi9I8rybRlOXxEhY1QGgygrMK2aKeTRHg+u4Tc10uLXCPVVcArRwHrP03+OhXrgYUPSYUJQDxhRLfPGk46xDjBtrvGpyie/X5jJS55Z3mXnAv0wsId2F/nxyVvL+/oXWl3NKFymDHqaYkwcZj0qn4rGq2H0ungnDIFQGpCgKuLoMxmyVwZAIgmSj2IiDU2gWEYxOqIt0fh21IDLff336N+5kxUPvoYeT2RUIl7PPg7wEWtmoMrbNaZYjBnAdTOH4UHG/cLnSGc30mCtI64RdkXaWlEpWPrxTbXblYs80ZadtWcMOXDMW6G9L44oiIWLa6i1F+UEyoiUaVLEz5LY/fuQiQMgukbRyzIno6+v0dYqBZdefNE4M//A5Y8I10uHihZtwuPT+2Nn+44Ef8cR9qmd1V78fBc5WcLAAu3tG5sRmeg0q0s2D/S0IRKB2ATCZXCDGuSNTVai85FDpCppX7YiIrZxOfQOeTGbZZhw9Dzu2+RfsklwvP9fsR9Pj7FYz3maOjz8hSv41++HHG/X1JAG/N4EN6/v1VW6YeLstvvwP5LL2v1sEZA+IybXY8TjTqG1DosFVJsCs8PgB9iKKfYWczfbrlQcbVs/TYiEo9gT9MelHnLFI9d+9O1KPMol7cakx3oO0m4bxS19YsdeV1J0kdyDJxQEUSpPkeY/WMoLBTchAHQBmlEJR5lxRU3T2jLXODpHsCOn9Rfr2yl9L5s8rVj2Qvom+tA93QLeucQ8bVom2wIJctmFWM4jc6DJlQ6AKtJKODT/FPaB76QLwWhwhfTGk3QZWZKHgvvlVrhU1YLTH36KNqgOUFDWa2gLRa+bkVOaPduSXFhePdu7J44CY2ftcx99HARa2yEZ8EC+FetQmjnzpSe0zRvPqqefRahnTuFdJcopRPatSuhMOOKaWkdiFBpEp2cf1Kpb0kvVt3Ow2Mfht1A/kZJhQo79VdCB6R+4kwc0xdMx5lzzsT8PerTt59Y3jIr/WYRFw2LIypxUR2HsQXHJ86/RtShpM8WhIqxsDuw9Tv+Pn3MxZKnx9mxCfzrf345EGoCPrtUWEk8l0knq+0LycTGH2QoKU1T+OqGsUl3ffWB1GaCaXQMmlDpAMQzgDSh0j5wIedoQ0Oz0QpxMa0hJweFb74BQwGZyRTatVuyLlfDQstMxDw/LgAAmAcMINsMqac6IuUVqoZxVf95Kuk+dgRMLIbdU4QTeSSFqdKhPXtQfvfdqH93JvZMOwN7Tp+CuM8nEWd7pk7DjmPHqJrdcZ8bRTOkKDPcTMrDqB6RLLAX4LOpRPwlFSqnPwuc+rh0lk8HpH6WVSzD+hrSgVMfVG/JbnGtTXOII0fGBEKlJfARFSF6ZsjJEW53LyRREgDoPxV0yUjJ0/mISiwkjY7ERZG8hn3CbU60eKuBZa9LHwMAuxDVFI8VUGNXtRdfrW7DiJVGm6IJlQ6A6+8HgEHdUvQo0GgRhoICUAYDmECg2c4aLqLCeTzYTzoJ1lFkbpM8osKnhmSmYrX/I1NgbccSz468hx9Sfa1IRbmqUBEXkXY0TCSCXadNxLZBg/m6GwCIlDZ/IA+rDGMMbt+hSP3Em5pQ8/IrinW5yAtJ/QSBcOtPzlydij/qR7VfPeQPiws47lbJYMPDnfoJRoO4fuH1za5HoY1r2cQRFfGgQm7SdHpJy7Yna08GAL1YqBR2BzysV8rxd4KJSVOJvFABgNWisQXiqI54NlHlRvIdWfwksOBeYflVbKrIV8PXuCSrA+SOwd+u77pWAfF4500dtwWaUOkAxOPIhxd2vGfDkQhlMMDYmxTRVT3xZNJ1+boIk+ChQtvIwTG0W3bi1bE/GbUDn8GAdHYoYvpFF6H3kiVIO/tsQKeD7QQyQyVyUF2odCZCO3cicuCAYnkqrdRqXVaeRT+rrutdskSxjP9b0AwJ+8fZFtZBZwMlJwI3rQCu+YVEPaa+mHRfnCYnXCYXAOCqH69KvuPidM9hTv1c+v2limVi+3yOlnT+pITIwRZpBcLt4+8Epv0fcKV6CiohnFBhYkCMrdcaJQxqNeZlCemZzF7835oj4tMjZmG7uBaKpjOLu5DEQiUaAPb/CWz7XrofXDqQiUlEk5jZ14xGutWAnlk23HIyOU54utCQwjeXSCO9R7ofjCZUOoBGv/CDyHUmmEOicciY+pADkFptRaypCZHycoTLyvjOG9omaqVkhYpiois7N4SilT8dc//+0GcJE3cNuTnI/8+T6LdiOZwTT+P3JVqd4Oq+k5CoADmVwuSmb79VLKt/d6bqunJ/GUBWoyIO/5/9JnDFd0B2P6D70cC9B4BjkosPA23AE8eRuo797v0IRpMU9IpTH4cxolLjr8H2hu2K5SVpJZh71lxMHzwdBXYiItpcqIRFglkctTCYgf9v77zDm6r3P/4+2UnbpLuldLLK3opFRBRkiOBeoIKiOPCKggiOqzhBQK573qs/BwrX6/aigqCIV7YMQShbZlvoSlf2+f1xclZykqZtkqbweT1Pnp7xPed8c5r2vPOZAybLxUsoSOuveO+1sV8/WK64AuZLx0Cb6I0pUesAg0Vwk0o5tDzJP9FHGj9TLn9AY+lEoM7n7ykuDUJ3aN+4FXBNGwd3SsWqmcPw9d+GCI1ia+3Rf9i7PSxqbM4mW0TmfSdvN9Aac48mJFRaAWlHz0bTCIlmk3onZ073LW1fs/on7C0ajP0XD8eBEZfAeYxzaWiSxbLpglDxQaisqvL/xmvs08dvG8MwUMXFwdCD6x1j27EDjmPKLpRYyfyRBgLrOnZE6j33cNsbESr2g4dQvyH0mg5KWURCjIra5174Bk6GyNDsoUKTwkWbF8EdSvxFFGNUtpRtEZZH5o0UlnMSctDB0gEzBszACxdyFXPDLlQUiqK1CI1okcR/ZwLgPv9Z8+eh/eLFYBq8bsS4dIBhEHfeILR/8UXkffyxcJiztBzs5f+SF5or3w+setq77BUqWd5eakr3RKUSy/7bxfT/LAs3v+sGcplMyXE6xOs1QhPHWlv4Hvah/C3XO1zo+Mhy9Jq7Ah0eWY4xL61FXTMFRzjnHouQUGkFlFqPE+GHFxvu+nrZP45j99wjs5TwD2C1TKgESBv3+tUZBddPytQ7As5F35FLo/XU1wNuNxidjkvXlGDf08KmbGHCVVUFAEi45BJ0/O+30HfpAqBxoeL463DQ/Sl3yO+Pb4wCIIlRUfn8o2+moGcYBhkmrqP5suJl+OpA8IJzABRFaKQ4auXSdS/veDlu6HqDsN2sE2PXeKEVdqHS4ypgzELgzl/Ccz6GAUxei+KOZXKLDcAFvQJAvJgJZB49CsZePm0vcocBf/sduPJtcePaRdzfLO/6GXwvoAoSIKv3pltLLCofTBmE2aO74qHRhbKh8Xqxo31LKam24dxnf0TBw8ux6XCAPlVeDp6S35/dJ61Yuy9wldzNhysw8Jkf8f5vh/32WUmoEOHmnHwuLiU7ydjISKIlqOK9JmOnM6RgVXWSKFTU8aK5WZUg1phgva4f44CBwrbUe+5Gh/9+K8tw8IXR6WRVOrW5OVAZ5G6/hj/+aHSO0YC3qKiTuM8pX5OmYcsWWJcvD3xcVWAhEz9smNCkjsdTqxBUzMeoaMJnacyME7M//jgd4B43pQJrGCm3cVaGVGMqkg3i58+sj4JQUamAQVOBdv6WwGZz+0pxub5cvo930cTJ/04YrRa6PPH+e+rrOdHTaYT8+LI/gVpvMG7H4UBOgGaTAGDw3j9J9dpO6fG4e1hHGLRyIZrAu34crhYHpV6wYDXKajir4LVvroPT7Qk41qrwhdXu4ix+r/20H5e9shZV9dzfQ53dhWveXIfTtXY88bVCQUBy/RDh5vmre+PuYR3xyR1B/tCIFqOSCAOlzsZSGJ1OZkXRd+0qLFvGjRMHel0/xp49kPfRh+i0ehXS7rtPsJgEnY9BNI3rcvPAOuT/qGKlSq27sgqARKhIqosenzFT5rKxHzwEd3U16tavR/m//hnwnOqUZCHlm4dtaICnQf7w5QONVd6HRziQCpWAJvnCMcCwR4CJ/wnbdYPx3aHvsKlkE8q97pAUYwqSDGJgPV8DBhCFitPjhMsT4w+k5A5AAle63k+o1HrbUUgsKjz5n/5bCO4Vgs19a7js8Qb3mlK5gOesvvL9l/0DuNvbw0iwqDT+N8WnLrMsZJ2Vm0pFnQNOt/zzdbo2cEXmKgWhUmblxi/8oRg7j1vx9i9cMP9vB8r9xko5010/1GSmFUg3GzB7dNfGBxItglGpoDKZuGqwtbUAX8xNqwV8AjnVKSmyeCFDYSEsl1+Ohp07kXr3XWB0OlT83/8hbfp9whjTwIFoCtKmhazTCbdPZ+VQ+hJFA1c5Z37WJPsLFQA49dLLSJ85A/aDh3Dw0kuhTk4Ga7MJdVGMffuiYds22TGa5BRos9rBF3dlpawaMC8oVcbwBZlLH/oBYRhg2OywXTMYh6oP4aFfHgIADMzgPkMphhRYdOJ9drPiA9MoCVJtcDUgQVpFNhYxpQA1J0K2qABcgUZdTg4cf/0l1tfR+HwG/uK6mQttE9oPEPdd9Kg8uJq3SG16R0y3DoBeo4JGxcDlDWyNb2bvte3Hqvy2lVrtaGdRtpzzSRWZZoNQBr+sRh7w/frPB5CfGgedOrhNodZ+ZocTkEWFOKPh3T9u7wOwfssWP5ECePuQ+JD1/Hx0/O+30KSlIWPObBRu/R2G7t39xjWHhOEXg62T1whx18SIUDnFffPlq4qqJZlMAJdWzLrdOHjppQA4ASYt3ma58kpk/P0xmcDRpKVBy7cV0GgEa43Lp4Kvu5b7Bqw2SR5SQx5o0fvRSQJxm9ozJxKcrDspLJ+o5Wp3pBhToJbExkiDfnUqHVQM96867O6fSGDyurDqfC0qfIyKsouU8Vo0hc+Sb1zSIW86O982oeBCcV9feZVbIQPp9H40BsMwMBs5C540I7Op7Djq7/osqQ6caVbVwLl1Luicir9fxv1f2XS4Eg0+HZ4f+s8OHK8K/nsPR3xNLENChTij4YUKHw/x10SxZgUfJAoAuvzGYxR8+wC1hMRrr/V3e8SKRcVHqKh08owbd00NGrZvD3i8NjMDyRMnIufdfwnbjP36gtFq0WXjBnT5da1QCMxdIRcqnhqvRUX6rda3gV4T4dN7AQiultZE6r45UccJlXZxcmtTukl8mDMMA5OGe4i3CaES5xW29T6BoXVe10+cv+sHEF21Hh8B7wefNh2XAoxZAAx9yL+L9lBvY8MQ71d6AieMS1vQ4E/JorLhUODPGy+KEk1ajOrBBXxvO1qFbo9/7zd2b2lwF9Yz/92N3w6chq0FrqtYhoQKcUbDf6t3HPnLb1/K1KnCsjSYLxowajUsV18l2+aOkRgV1ymv6ydN+YHisVqDxvzwDRn1+flQWSxQmc1CzQy12Qx1YiLU3gBlT638PQuuH2nJc18XQBO5stOVghA43RA4qyJaVNvl37w1Kg2y4rm4jheHvYirO1+Na7pcIxsTsYDaSGD2xqhU+vzNNWJR4bP0Gi2IGJ8hLg+6E7hYoQcUb9UJsbJxupmLH5v83qYmB9Q+t3w3nv3vnzjhtXq8cmM/5HqbzX6x9XjAuCg+UDbRpEN2UvDmtMUl3N9J10zR7ZeeoEe3dmLQ9YR3NuCWf21s0tzbCiRUiDOa+As583DJ3x/HgTGXyvapkxKFZW0UhAovmnT5+QCAzIcfRtbCBWg3j+vz47Y2XlAtXNj37UP1t/6VRz11dWC9pnd1qihUeFcNP8Z1OvA3Rd5aooqLQ8dvv0HHH74Ho5H7/f3M/ODqqgiun8wOCBdatRZvjngTgJhl05pU2uRWpNyEXGi8qbbD84Zj7uC5MncVIAqVsPf7iQSpXktluU+hxdrAMSqAxKKi0ANKhlSoBIKvZuu2C1Vyg3GqRgx6La8LvZ1Frd2Ft385iHfWHsK+Mk5k56WYsOKBoQA4q8ljX+5UPJa3qFiMjQeO8+cekJeEbY9fgpdu6Is1sy5CnE6ewbSxkZTotgoJFeKMJumG6wHvQ9Jx6JBsn9osxlDoveIhkuT+33tIGDUK2W+8DoB7kFvGjYO+gLu288SJqBV9OzhuPE48+CBqfvpJtl2olaLVyrKg8j/5WFYHxfde8pjHj4M6MVFY16SlQSMROTxqn2/Pp15/HcXnnAvb9h0AANW5NwMpnbgKqWEgxcgFUtc4auBwt25fpSp7lWw9zaRsuZLSpiwqKZ25n9L4kN9e4VoiAAEtKnxJgEZjtUJpcSCtNOxbz0WBLhnceBU8UK1dAOxb2cgRHPWS0vVuryXGYtTKUqCXbPBvRwGIWT9JJuVihqN7ZAoWFP7cBq0aiSYdLu/bHkadGn8b3tnvuGAWIZZlhaJysVJgMhRIqBBnNOrERGjSA/jEJQ9ibW5uxOdi6NYN2S+9CL1PPRF9166ARgP3qdNwnTwZ4OjwUbNqlbDcsE0ea+K2cg8Jtdksy4LS5ecjfeYMMN44HbtC88Eumzej/YIFIVVbZiTfnj02G06//ApYScyOKi0L+NsWrudMGDDrzILV4ljNMaw/ub7VUn2tDvmDmI8/CUabEirJ3s+39ZhozVjxmLg/QIsCdTInJn3jlvwwh1DaX6MTC8KFYIXig1lvVX+PlI2LgCXXNHIEh2/gKxCahQQAqiUxKkrMu6oXLu0lj10yaOWP7Au7pOGpy3vItgXr+/P4V7vQa+4PyJ/zXwxfvEYmtGIZEirEWYuuoACJN1yPtPunQ6VvvZ5LKoNBEC/2Awf89rtOn0b5u++FpZmhu6oKx6bdK567XB6zIRUqSvCxJc6jR/32Bazmq3QewaJSj9J58/32a1IbtzI0BYZhkKzn4hZuX3E77lhxBz7484OwXiNUfDOPeBESjDYlVOLSuZYHrAewKnQkVuiTBYjp8NI0flzxBmDOBu5cC9z2A3DdB2J6cmPwdVhCsKikxuvRs70Z49W/yXc0YnVoUAhe5QvIfXz7IGHb6Vq7X3n8Sm+MCi9sHh4jlqxQqxgkxekQ55MqbdT6V03O8kl/DpQB9OaaA/hw/V/gDS4HT9Xh5+JTimNjDRIqxBmP+ZKRftvav/giGIZBu7lzkXrXXa0wKzl8/IqSGCl58imULViAo/fe67cvFOrWr0fpvPnwOBywFe+V7XPsk6dvehoRKiqzV6godFJuSt8qwaJSV4eqZcv89mtSU0I+V6iYvHELpxq4f85L9ywN+zVCoc7nwXnGCRWVSszCqfYKWt6KMnZxwMP4FhYuqVDpOwGYsQto1xvIPQ/ofnno89CGLlQAINGogwmSAm1LrgNeLwJcgYu21StYVNTe9hqDO6UKMSQDn/kRRfNWCVk5NqdbqGDLW1SmDhXjsvgOHfF6uTDxraoLiAXreKRCxeX2CC6e+d/5t+horD5LrNA2ZkkQLSBt+n0wDhSLQ2UtXAjz6FGtOCN/hOBShdTMmpWcv7x+3fpmnfvI5FtR8f77KO7dB0cmTQIg1kaxHzgg81XzRedUlgAWlXhvtk4LrTu8RYVPhfaFUYe/346vINCrW8eKVudqhlDRtiGhAgCJXldq+X7A2QDYqrj1nlcHPIQXKjKLSktogkUF4CwbMvvJvh+AU7uBUi4Ydu7XuzDyH2uw8ZA4PyXXj5TUBPEzZrW5cPBUHRwuD0a/KPZXSvTGqEiFPi92TDq5CNErChW562j70Src/K8N+GFXCa597iMsfWeefxd4L542EqcSMaFy+PBhTJkyBQUFBTAajejYsSOeeOIJOHx6ruzYsQMXXHABDAYDcnJysGDBgkhNiThLUZlMSL37bmFdHeAh3JqoJBYGXzSSiq6sQrE6X1wVFTj+0EOo37w54Ji4QYMAjQae2lq4SkqE7aLrR7mDMG9R4fGtWhsqvEXFGYWYHB6DtLsvQhMIkaDWIXf98JaeYPBxLPWuNpD1AwDZ53A/v5kulr43WIJ2pua7l7sq5ULFVlyM8n/9K6TPvgyd976GKlRMWniUHokNlaisc+D/fjuMvaW1+L/fxEBy3qLSs70ZN5+Xh1cn9JMd6uuWOV1rx4o/S3C4XPw9+mbuAIDaK1p8q+QaNP7z0/n0xXrosx1Yu+807vxwC5a57seNJ54Hu6gTkuEfpKxkEYpFIiZU9uzZA4/Hg7feegu7du3CP/7xD7z55pt45JFHhDFWqxUjR45EXl4etmzZgoULF2Lu3Ll4++23g5yZIJqOtO9Pcx+ukSRYaqa0J5CrsUBDAGXPPw/r19/gr5tuDjhGm5MtPhi832BZjwe13iwgjU81Wh51glzkxQ8b1uh8lODfr6u0lDtvcjIKvv4K+sJCtHv2mWadszEMarlQaS2LyvFaudvsjHP9AECHYeLyZ1O4nzmDgnbB5uuo+FZsPnT5FShbuAgVHzQxpsjkdR/WKMTJKNAhNQ4MFCwM1pPYILGiuCVZNXyMSoJei6ev6InLemfJDs1PlYvQ41UNOFklLyqn5DJVMbxFRS5ifHsJAUB2kkkxdgUAdAw3P6a+HF/rH4MKcstKW2lmGLFeP6NHj8bo0aOF9Q4dOqC4uBhvvPEGFi1aBABYsmQJHA4H3n33Xeh0OvTo0QPbtm3D4sWLMVVSjIsgWgr/TxAAVAHiL1oTfn7V33yDpAk3CjEiJx5+BO7TYsCrfW8xtBmBuzQDgG2vWL+icqlyHEbc4MGo+WEFAICtr4fj8GHUbdiI+o0bwRiNSLrxBuV5+lhUUu6cCn3XrogbXNTIO5Sj8fZd4l0/qoR4GLp0QYevvmzSeZqCryCwuZtfhbS5rDi8wi/rx1dAKdGm6qgAokVFSlY//20S+MrPnoYGsCzr9wCv27ABKVOmhD6HjB7AgdVAiXIdE1/65CTCAIXU9R3LUJcpNra0OT1Yd6Ac//3jBDqmcWnNRgWrCADkp8gbK55opBQ+j8rr+vENpuUr2EoxaNXY+Ohw3L90G1btKQt4zmzmNDozx3CB6g9crv4fbnHM8QvwjVWiGqNSXV2N5GSxlfm6deswdOhQ6CQlukeNGoXi4mJUVip/c7Tb7bBarbIXQTSGNKtHWucjVuAtDI4DB3DiYc7qyDocqP7iC9m4o3dMRe3aX4OfTOKPLpn7pOKQuHPPFa5p+/NPHBg9BiVPPAEASL7ppoCVen0tKuqkJKTcOhmGwsLgc/LBdM45citXXAiNA1uIr+vHt55JNFi4eaHftjpn466JjDjuAbWldAt+OvJT7HdR1uiB/rfItzWSVswYvZ8HlgVr8xeRbH0TrUkZvbifZbtDGt4lPQFGRkGoHF6Lq9eL6coNTjdufGc9Plp/BE9+8yeAwEKlfZJcHFfUOVCt0DXZl17tvcUhJa6eLY+NQEq8shUwwaBFdlLjlrlcpgyPaZegl+owvtE/BmddVaPHxAJREyr79+/HK6+8gjvvvFPYVlJSgowMuULk10skfnMp8+bNg8ViEV45OTmRmzRxxiC1ovAptrGEyiR+86r11jlxnlA2WR+VFF6TwjqdOHb/A7AXF4d4Te7BYPVaVnjiL74o4DFqqUVFrW62G01lMEDfvZu4Hh95oeJrUTndcBoeVjnIMFKkGPyzmUIRTPnmfADA/qr9uO+n+/DjkR/DPLMIMP4VeRVac1bgsQBURlFI+vbBAkKoWOsLX1iuIbTgXLNRI8/68YHxuk3sCinJgRxavjVVPv/9OI5Viu/t+oHy59e3fxuC6wZm44Xr+gAAClLj0K2dGSO6ZQQUKTyN7QeAXKZUWM5mTmNk8d8bPSYWaLJQmTNnDhiGCfras0eeBnX8+HGMHj0a1157Le4I8E82VB5++GFUV1cLr6MK9RwIwhdNUhLav/Iyct5526+ceywgtS7w+AoIKc6yMlR88CE8dvEfa83qn1DzvX9DMx7LVVxvoeRJt8iu6bFJCq3Fx8PYu3fgeUosKpqUFDABamKEgk5SDTgaQsXXouLyuKLepDDJIFbpHZgxEABwWcfLGj0uzyy3cB21tpH/eyaJMEtoF3gcuEwvxsD9jjxe64k0I63JQsXg/azaQ+uhxQAwMoGFihnc9ZVqp4zoplzWP9Eorzrb4HRjtdc9c82AbDzpU6ytZ3sLFlzTBxne3kNatQrL7xuCf04a2Oj8U32EihriPI8lngsAOMcs91R0qf5fo+eNBZr8H3vmzJmYPHly0DEdOoj54CdOnMBFF12EwYMH+wXJZmZmorS0VLaNX8+U+ASl6PV66FuxOBfRdjFfcklrTyEgKoP8M123cSNO/eMfAcefeHAW6jduhG3XTmQ9/zwAgHUE/ierSU9Hu6eeRNJ118LQnavCKTSBqxGzUHS5uUFTg7VZ4rdivqdPc9HLhEpc4IFhQilodefpnbgoN7AFKdzwwujFYS9iaPZQlNvKkRmn/L9OSppRXgAvFporhoROIsAbsagAXJyK22YD28CJAqkLyFlSohi7EhC919pnCzE8wO2EWhJs6ikYBtWhn4X1JKYG1Ww8bE65FS49QY8r+im7tYJVqR3RLV2xLoovob7ftAT5/xCpdWijeQSyqzaio/two+c5XWuHVq0KucJuNGjy16G0tDR07do16IuPOTl+/DiGDRuGAQMG4L333oPK59tXUVERfvnlFzglaWcrV65EYWEhkhT6gxDEmUrcBUOF2BnGYEDN9z/I9hsHDhAsIQBQv5Hrklr91dcAuG+eJ2Y9FPD8qoQEMBoNjH37gvH+ffKVZJ0SN6s06FgJfRext0hLs6eMA8TaNnx9lkjiVGhO99zG5yJ+XZ5d5buwu4KLl0gyJEGr1oYkUgD/h1UsNFcMCWmxNGPj/9OFgNr6enjsdpS/956wj7XZAtbdUUTv/UzZrQHriMiQBCr/O/lO3LTvQtnuZHCWGd8YE9+AWSmWAOXxAf/6Jy1lSKdUFGaIf0fnqf4Ulre6OwEAcp3+rS+kVDc4cfGin3HpS2sbrRETTSIWo8KLlNzcXCxatAinTp1CSUmJLPZkwoQJ0Ol0mDJlCnbt2oVly5bhpZdewowZMyI1LYKISbQZ6ei0ios78P2HrElLQ/bLLyP9wQcDHu/bJDD1vr/J1qWdonkEd5Pki4KSC0qKJj1d6KSsa2EjR2Pv3tDm5YIxGAS3VCSJ04oPlJu7c6nbWlX0vjWuPyEW7Es3Nd0atejCRcJym7GoOCWxJiH1gBIzf47edRdOv/yKbL/j8OHQr827fsACPrVrFPHO1cmq8dCJC1HqlrsjExnuHL5CpV1i4KytBH1gp0VKvHIzwuZi1Knx3fQLsP0JrhL3OzqxCvDvNYkAAD0rD1JuUMlF1t7SGlhtLhyvasDyP6JX46gxIuasX7lyJfbv34/9+/cjOztbto/3O1osFqxYsQLTpk3DgAEDkJqaiscff5xSk4mzEsZkgqF7d9j+/FOoRgsASRNuFGqeKLF/5ChkzJkj25Y6dSoqP1oiVPlU6mDMKIiSBElJAcU5Mgxy3nkHtt1/wjJ2bNCxjcGo1Sj4z3/AOhxCunIkubHrjSi3lePaLteCYRh8+OeHIWXchAu+WJtOpUN2QnYjo/0ZlT8KKYYU3PrDrThUfQhOj1NRaLEsi7d3vI3uKd1xQfYFLZ53i3A1LQVc5c38cVutipWYPbUhCA4ejQFQaQGPk4tTMTRSlqCO+3JghTfInJU/xFMYZReSb2yIFD7NGAByk004UiFabdJCCH5tKioVA4tRi0u6pQOS7y67ymyo1+th8onBMXrqUF1bj6lLtuOyPln4+5diKrd0rq1NxCwqkydPBsuyii8pvXv3xtq1a2Gz2XDs2DHMnj07UlMiiJiGYRikPfCA3/bG2rE7jxzBqZdfFtbN48eB0WigL+wibFMn+QsdX3eLefw4WK5ovJeKsWcPJF17baPWl1BQJyRERaQAQKIhEY+d9xgKkwsRr+W+LUdaqPxy7Bd8f5gLcK62VwMAbu15a7PP1zutN1IMKaiwVWDTyU2KY9YeX4tXt72Ke1bd0+zrhI12XPYKmNAeNfxn6vh90xX3e2pCC4zlrslIAmpDiFOp4Nwif7FcYOwpWPBdxUDYrdz3+faMshXLNzbEl4XX9MZt5xdgzaxhyEkW46SSTOG1qEh5bYz49/608yYAQDVE4eVh1HCwXHzMJz+uw4ZDFTKRAgBlNdGvMxQI6vVDEDGEUuG0BGn1V62yq8Lx11/CcvpMzkVk6CLWNlErWFQ0afLqs+n339+kxoJtGd4NZHfbFWNXwoHdbce0VdMwa80s9Hq/Fzac3AAASNQnNvucOrUOvVK5+iDHao/h3Z3vYtkeeVPHv6ziZ8G3XH/UGbsY6D8JmLompOGBArT1nbkYC3dNE98PX7K/PoQUZa9QOcxycUM6twtZaypxcHk6bJUajG6vUGMF/tVjAci6Ll87MAePj+vOfRGRWFGk1pZwoyvbBgAot/TEv9yXAgCqJBYilyYOxWyOd+wOxXOUVJNQIQhCAUatRrvnxABPy1VXCVk6AJB4tXIsB+utO2G55mqhcq2+UCpUEv2O8X0oaNoFTx89k+AtKgDwzz/+GZFrHKs5Jls/bD0MALDoWxaEzBd/21a2Df/Y8g88s+EZWWn9Cpv4UD5QfaBF12ox5nbA+Je57schEKh1gy6/AADgqW2CRQXw7+IcjGru93WM5eZgsddCZ+fuq/WIEYWGKmgUxIWfuN//I7CgANj8rt/Y4QHSmMPOye0AAFdmX2GTXSO6vjxqA3Z4OgIAsuqUC+KVWANnEUYbEioEEWMkXnUl8pd+gpQ7bkfm3x+T7cuYNQtp909H1sKFMPbzL0muSRH/0UtdP8aePf3HpokprznvvH3WWFMAQK0SvwW/vv11uD3hz3A4Yj2iuL2lQoXPFNpatlXYdqKWKw64uWQzPt/3ubB9ye4lLbpWtDFIigBK4dPi3U1x/QBiF+cq5d+FDBvnmqtmOREb55SkRtepwVQfQV6K3N3ZJ9uCK/r6pF1vXwo0VALfPgC8NghY+4Kw644LOuDuYR2xbOp5TXsfTaWGS1pJbt9J2KSJE62qbo0JO1iujEiOTV4gkndlWUOooBstSKgQRAxi7NsX6TNnCumaPKq4OKTedRcs4y5D/IVD/Y7T5YhBmobu3ZF8661If+ghmAb6F4ySWlR0ublhnH3b4/vD3zcaC9RUjtZw3+LTjXLLldSa0xwyTNy38mO1osXmWM0xnG44jVt/uFVmUfnu0HfCPNoC5svkxe8sV12Fgi8+F3pMeZrq+knM535W/hV0GAAhjoUPpo2TZCw5ajVA9XEUJIsZPjeem4Ov7h3in2YsbW9wag+w6ilhVadRYfborhjUIcJxWV5XlzY+FSO6ZcBs0CBfktTiNKRgh4cTKrn2vYCkGWOHVM5FVOeInTYNJFQIoo2SctttMBXJv5lpc0TBwTAMMmY/hJTblIM31QkJMI8fh4RLRkB7lguVOWvnYGmxcgPH5sKnEHdP6S7brte0LNsj1ejvHjlWeww/Hf1JcXxbEioMwyDlLrHNSvKkSTB06ya0vWiy6yfVa1EoDaExobcwXA3LCZV4qVCp0YB1uXGHVqz8fKpGOWYFtU2o9RIp+LYBxiS8eVN/rHt4OOIzOwq7a1N6CUHDCaiXFYcr8AqVer6OSvUx4FQxZyVqJUioEEQbhdHpkPvWW7JtUotKKLRfsADZr7xyVrl9eOZfMF+2/o8tgSsBNwWH24FHf30UH+7+EADQLl4e+6NTtSzbI9ngn8FVaasM6Gpq9YDapiIxbPEFBoV2D01tTJjVn/tZugtw2VG3cSOcPtXQBbyl9mvAWTGzJYLD41Sh5rgB5+4TPyPqQE/PulgQKl5RYUqGRq3iujCniEKlLr0/6qGHjeWsQcmS1GteqDhcHjjdHmDNAuC1c4GNkYnlCgUSKgTRhmF0OqR4+2el3nO3rMQ9EZyxHcbiycFid+l2ceEJJv583+f4+sDXQofj9vHy8up6dcssKilGf7eB1WFFWX2ZbBsfC7P80HKsPba2RdeMJsmTboGp6Dy0f/FFQUAz3rYpwdpEKJKYy/Ub8jhR98HjOHLLJBwcM0Z5rF1uUbl917ey3cd/S0bp72a8dfMA9Mm2YNaoAB3D68r8t7mj7Ebhs5yMElGbIsar1GQPA8CgApyliq+6CwD5qWJ2UL3DDTi8Kfy6yLe5CAQJFYJo46TPnIFue3Yj7b77WnsqbY7hucOF5YPVB7GrfFeLz3m89rhsPSteLh516pZZVJTSm60OK041yL/J87Esq46swj2r7pFlBsUymuRk5L33HsyjRwnbGB0nVDz2AO6WQDCMYFWp/fJj7hxKVpmDPwuZQbUwwuRUTs2t3BePUZ3N+OreIeiUrtD2we1UdpE4muiyagketxAYDJNEqLTrA4x6Drj+I6iMXAZQBcv9lFpUspOMQnZTAwkVgiCI1sWit+CGwhuE9Sd/ezLI6NDwLSLXwdJBtt5SoaJR+RcUt9qtOFUvFyq+fYRK6wK4PNoAjJ67Z6y9GSmzWX0BAG5nEPfmJxOExRrWhGRJI0Ntnk/8VrAMokBun1AbI4aDhioI/jPf/kpF04Bu46D19t2rYDmxlSKxqOSlxGGa7hv8pHsAtoqjYvsBEioEQRCtQ/+M/sJyrbPl8Rx8qjAAnJN5jr9QaWGMCgBoGLlYWXt8rVCnhYe3qPCU1rddoaISXD9NtKgAQFI+AC7OhIeVWkxYFuDFpcaAem0SUr0WCV2HDki67jr5+RqCFI8LJFTsUbSo8PPTmwG1coFIjZoTbeXgLCo9VWK9/Xi9Bg/gYxSoSpGw+VWJRaVl2WotgYQKQRBnNSaNWBsjHPVU+Gyf87POxz9H/tMvULmlMSpAaJlDZ5JQ4Tt+N8uiYuEqsHpc4u/BU3ZY3C/tR/TgXlzRPwfJDZwFRJORLnQ152ErDgP/GgX8ONf/WhWH/LcBQEUUC+/Vixk/gdB6hcoJlot3ulXzA/ox+5CeoJdV1S0pLYHHThYVgiCIVsWklQgVtuVCpdxWDgCY3n86VAo9bpRcN03FoA7csZfHNzbGN9i2LSHEqDTHopLICRXWIxEqRyXpynw8B6MCdAl4dGw3jEjnxmrTM6C2yAv0sd89BhxdD/yqkCX26STlOez6ounzbi68RcXknx3Go/a6fo6xYtHHFws24Itp5wN//SZsO1hahYpKb8wNCRWCIIjWQfrQb6lQ8bAeVNq4f+xK2TmAQsn1ZnBbz9sAABflXIQ558o7Zy8YugBvXfIWhucOR7pJLDYXzU7R4aaxGJWGHTtQtmgRPA0KgbJKFpXf/yM5uIr7qTcDKhVMOg0uTuUejZr0dFltIgBwVzWjnkhNKbB3BXBkQ9OPbSpKGT8+8MGydaz42c/Lzkb7RCPwvfh5SoEVGre3izK5fgiCIFoHqThxeVqWRlplrxLOl2QIbHpvKRO7TcQ/R/4T8y+Yj4ndJsoCZ8cUjMHgrMEwaU1YdtkyjCng0nHbStaPEkKMSgChcvi661H+z3/h9Ouv++9Ua4GBU+RC5ZSkDxNvUTEmCptc3lormowMGAq7wHypmNLstksemy6JhUcahzJjD2BuD2i8QqB8P/DxtcC7I2WulYgQgkVF6y0Cs9bTS3KcV4BJ+iKZmXqYwLnGnBp5lexoQkKFIIizms5JnYXlWkctPKyn2edac5TrEpxsSIZWpRzIGA7UKjUGtRskuK3MOrPiuFRjKjoncu+v3lkfsflEGr6OSmOun/rftyput3ebBodV/H04KyRB07xQMYguHucJLiBak865RrIWLYI+mxOejlqJ605aTK/GGwOki+eaMU7fAdzk7bskra1iqwr6HoJSeRj4eT5QFaTaMC84gllUvDEqlTBjlnMqt/GPT7kYG8nnP5GphY7hhHels+VB4M2FhApBEGc1cdo4rL52NQDAxbpgtTcvlbTeWY/Hf3scANA7LbRuweHi+sLrAQC9Unv57ePFTFu2qPBCBU4nWHdg95ynQRRj1d98iyN3TIW7qgpHbpsiG1f+u03s7cQLB69QsR84ANsurp4O3wOLUalg6JgPAHBYJUJF+lmp5RoBIt4bxKzWADp5E0NuXDNjhTxu4KU+wM/zgPVvBB5XH4JFRSU++td5JC0evrxbFG4AMiC6ucrsLY+tai6td2WCIIgYIc2UhgRdAmocNaiwVSDRkNjkcxyyihkfYzuMDePsGueaLtegXVw7RaFi9Jrs27JQUenEb/OswwHGqOyGYOsbUPHBB/DUN+DUiy8CAE6/847gyuGxnWJg27kT+sJCMDWlYADAxPVQEkRKp47QF4rVZ3V9LwDWbJVbVKTuHm/HYiRI6tdolYRKKZAWoKptMA79Ii5bjwUe19B41o9aLbrBjrHp8KT3gKpsF3BknWyc1mtNsbImnKoLf4fxUCGLCkEQBIAUAxf8ymftNJXD1YcBAAWWAozOHy3bF6eNbMaEilHhguwLFAUWL1TqXW3f9QP4x6mwTqew7Dh8GKXPzRNECgB4rHILmSmdO9767TfYf+EwHFvsdc94s4PcNZz40HfsJAt8Vqdwn4/qQybYqr3zsUtcP7VeMRQvSQtXFCrNtKiUSqomK1XOtVUDH14J/PkVtx5CMC2P6tKF8gGD5VWuzUw9TtU2IzU8TJBQIQiCgJilc+fKO7GtbFuTj+cLrvVP7++375FBjwAALsy+sNnzay58nZgGZ9u1qDAaDaBWAwAcx4/DXStmMLmtwV11VZ/+R7Ye34574Fa8/yHclZWo3VXChWXw2UFeoaI2y0vkq81iDMvRX71pvVKLyiZv0z6pRUUppbe5TQulheYk7hmBXxYBB1aL66ZgdVTER/9HUwb5u4myB/odc6qm9YQKuX4IgiDANQ/cUroFTo8TN393M/6Y9EeTjuctKvnmfL994zuOR745H9kJTetuHQ7OBNcPwFlV2Pp6HL76GqgTE9FlPeemcFcrPLSDoE30D3J21KqhN3PNI91WTnyoEuQBymqLuO6q8Qac8jEqx7YAFQe55XgxJVzRotLcKrWlf0rOoSDOSnbI14NYVNQqBl0zE3Cy2oYBeUmA3cetk+rvmhqQF7kstsYgoUIQBAEgJyFHtj77l9nonNQZt/e6PaTjeYtKviVfcX+0A2x5fF0/Lo8rLEXnoo06Ph6ueu49uKuqhO0nHpwFANDm5sJ5JEgfHi+axDgA8swuR40Geq/A8NRwIsDPoiIp/MZovRYJXnSc3gu3g8HpXQlIaH8MpiH8xRQqCNtruMDYj64C1Dpgwr+55onBKPkD2PuduK5kUamRxOFo44DUzv5jJHx17/lgWcCgVQMqHxGSlOc3/rwOynWBogG5fgiCIOAvVJYfWo6Xfn8p5OOPWLmHZJ7Z/598a8Jn/dS76rG5ZDPO+/g8fPTnR2E593/2/gdL9ywV1g9XHw5LB2olVD7CgfV44Dx+HLY/OUuDKq7xOKD02bOhsfgXLqsv0+PII4thXbkSjmNcoKoqQX49lcT1o9JzbihBqNiqcXxdEiqK43Hyc0nVWyUBYq8B/vof17F53woxS4fHaQN+eBTY96O47eu/yccoNjmU1GfpMgrQK3R3lqDXqDmRAgAaSerx2BcArU+w8qWLgp4r0rQ9WU0QBBEBfIUKj8PtaLTjcYOrQbBYpBnTgo6NNhY994CtcdTgla2vwO624/lNz+Om7je16LwVtgo8uY7rNj2u4zjEaeMw7stxAIDV165Gmim890Ht44ph7XZZrEooDQtN/ftBsy4RgPxBX1EcD2Ar6jaKdVjU5sCuH0YtChXW5YLzP4/AVsllDTkOHYG7tg7q+ADCqfoosPEdcb2+HIiTWCt+fALY8Caw7lWg8yiupL3Dx13k8FplVGrlazQiUhS55SvAegLo6+0kfdPnXJXagVOAc+9o+vnCCFlUCIIgEFioWB2N11WptnOmeA2jiXiGT1NJ0idBxajgYT1QSx5sTrczyFGNc6BKbLR3uuE05v42V1jfX7W/RedWwlc4eGw2mQuItduR/fprAMMgbcYMWK680u8cjMEAlTkRYBqvDut7PanFRmP2WhxqS1D+4jM48G0G3Dbx3jr27xMPnHUA6H8LV6kWAPb/COz+WtwvDZJ12TmRwrPvB3+RwuMbpyLNQFKKjWmMDsNEkQIAnYYD924Czrur6ecKMyRUCIIgACTqExW38yIkGFX2Ku4chsSw9PIJJ2qVWnhvfGdnABiydIgQANwcpEJl0aZF+GzfZ8J6rbNW6ZAWofIRDmxDA9zVVeL+uDgkXHwxumzahNSpdyB58mT/cxgMgMGC/EtO++3zRZMmtwgxKhXSZs7glnXegNzfP0DFR0t9D5UH+MalAuNfAUY+o3yhekk6/Kk9wSd18xcAX8re1/0jFTTJBcHP08YgoUIQBAGuWeC1Xa6V9c0BgKfXP91oDyBBqAQQO61NqpFzSxyqFovS1bvq8cz6AA/PECitF4M3fz72s2xfJDo1q31iRjw2m0wQtHv6KW6c1+ViKOyCjitXyIrDMQYDoDfDkOhEXFf579nveqmpftsM3bgqrh4nZ5Fx2Rm4bf7CtOyFxXCV+9TjCeSOqW8k7Zjn8teAjhcDBrP/WJYV42U6DgcG3Br4PG0QEioEQRBeHi96HCuuXoElly4Rtm0p3YK1x9YGPa7KW4adjweJNfhidr5IxUZTCdZqoLSu+ecNhMri4/ppaBBcP5YrroCxt39WlS4nR2YZ4SwqZjAqILfv78i8dUTA62mS/dN7VQZvc0QnlzVUX6aQ1QPAvncv/rr5FvnGgEJFImgUg2S95J3vPY/3Pkjvv7NB7NFz3fvy4NgzABIqBEEQEhiGQe+03hiWPUzYVlJfEnC8h/Xg831cddNYt6j4YmxBR9xgsTt1zrqA+5qLqV8/2Tprt8PjtahIU4d9Edw0AGddMYn3wlS6ROkQbqzGP9eEMXD3y+PgLGy2isCNJx0HD+L4jJmo+dGbvWMJUENHWlclWJ8pcxb3k2+eyIsaey2w9UNxXIzFSIUDEioEQRAK3NVHDCJ8bsNzcHuUe538+NePWHeSKz4Waxk/PIGESks6PAcTKja3Qon3FhJXVARDz57Cuqu0FA3buSJn6qTEgMd5JJlBKp0O6HWNsK43u5HRz9/dYrnqKsVzqYwGAADrcIF1A+W7g2fXWJcvx7F7vanFvkLlHG99HmnFYF58qH0sNeffL9Zk4WOglt7IpTj/+2bgu4e4bboEQHXmPdbPvHdEEAQRBnqk9sCtPUVf/8aSjYrjNpzcICxnxGUojmlt+PYAPIOzBgMATjWcErsIN5FgQcZ2d/jLrTNaLfI//TcMfTgXz/EHZqB+0yYAwS0qfpVrpZVjASR1qUP2jR1gvnQMUm6fgq67diLruWcVz6UycELF43Ci+q9mWKNSu4jLcd55SK1PvEWlXR9xW84g4JInxfVjm8TlDy4PuWx+W4aECkEQRACy48VvwUdrjgIAluxegqkrpqLCVoGXfn8Jyw8tF8aYdWa/c8QCvi6ei3Iugl6tx8m6k9hxekeAo4ITzKJid0WmLwzDMFAZ/AVCMKFi7Ms99GVZPBPFDCWGARL6dUT7xYuR/uCDYo0UBdRJSQDDgLU7AsanJF5/PXQdO8q2CTVeel8vbtR5U4gdkmaRfICspb1knI8rp8+NAeeHjsMD72vDkFAhCIIIwJWdxVocfMbM/I3zse7kOoz/cjz++cc/Zam4Bo0h6nMMhSSD/Jt2B0sHnNfuPADAnvJGUmIDEG3XDw9v1ZCiTkwMOD7r2WeRNOFG5L7/vrix8wig/yRxPU7ZNeZ3bZMJugIu9ddWzcWwaEwuqPWiW7Ddk3ORMFwuGFwV3sye8+8HLnoUuH2VWP3VKREqZbu5n2aJUPF1z416LvAEc84N6X20NUioEARBBECr0mLOuXMAcBkyNpf4AFZyfYzMGxm1uTWFi3Iuwm09b8OErhNwf//7cU7mOUIa9qmGpnfzdXqcwvufc+4c6FQ6dErshOsLOYtBJFw/POpU/wwmVRCLijYrC5mPPw59B5/aItIux3GhxxYZunYFANgrucyaxIIGv0r52uz2snXXaW9mj1oDXPgQ152YD3rlhUpDlejG6TpWPJiV9yWCKVmMb/ElMTfk99GWoBL6BEEQQYjXcr1h6p31OFZzLOC4Bwc+GLMWFY1KgwcGPCDbxgf+rjqyCrnmXAzLGRay66rCW01Vw2hwY9cbcWnBpYjTxmHDyQ1YVrxMJujCjTbDv/6Jb42VkJDGqjRBqGjbZ8mv3XEgLO3cKP9xP/ReEeNr4XGVnAR69vA5EW9R8QbTNlQCYLmqsnmDxXEZ3f0nEUiQWJSrK7d1SKgQBEEEgRcqdc46HK89HnCcw914r5lYIt3EPaj3V+3Ho78+ijEFY7Bg6IKQjj1t4yq7JhuToWJUgmuJF2qRtKhoMuUBy+ZLL4U2pxkPaKk4yegReJzf9eVCSXXeJKRdcTl0X38NQxcuWNZ0zjlQxcXBU8cFytoPHESCb8kWPvbE4Q2mdXhdiDpv08QBtwIntwEXzPSfRKAS+eYs5e1tHHL9EARBBIHvPlzrrJWVoAeAm7qJjf1iNeMnENkJ8nTZ7w59F/Kx5Q2cK8M37VnvTauNpFDR+giFrEULm9e2QPqwT+nc7OurLWYwKhUSr7gChu6c9UOTlIROP61G6rRpAAD7/v2o/PRT7B85CvZ9++TX510/fK8evVeojHsRmPqzWDdFStfLuFRkni6jgZs+A9TNTzePZciiQhAEEQSpRcVXqBRlFWFcx3FYf3I9xuSPaY3pNZsBGQPw6KBH8ewG5VRcAGBZFlaH1a/iLi9Ukg3y6q28UImk64cPZuVhmls3pMMwoPvlQPuBXOxIiPhabzQpylV/1WYz9J07AQDsxcWwfvMNAKD6m2+RPuMB0fVTvh/4+m9At8u5dd8sHyXM7YDZh4CKQ0BtCVAwNOT5t0UialEZP348cnNzYTAY0K5dO9x88804ceKEbMyOHTtwwQUXwGAwICcnBwsWhGZ6JAiCiAZ8N+STdSfx6rZXhe2903rjnMxz0D2lO27reRu0bezbrIpR4YauN+DuPncDUK5S++yGZzFk6RBsKd0ibPOwHvzzj38CABK08tgQXqiU28rxe+nvEZm3NjtAhdemotYC130AnH9fkw7Td+4MUxGXMRU3uAiGXr0CjuVTou179wrbGI03/VkqSH7/AKg67N0eYryNWgukdTnjRQoQYaFy0UUX4d///jeKi4vx2Wef4cCBA7jmGrEqoNVqxciRI5GXl4ctW7Zg4cKFmDt3Lt5+++1ITosgCCJk4hRKkk/vPx1LLl3SohL0scJN3Tn3VYOrASsOr5DtW1a8DADw+rbXhW1f7PsCR2qOABDdYjzSYOLXt7+OSMAwDFRxrVcmnmEY5Lz6KvKXLUXO228Hrbvi24EZgBC34hcQu38V95N3/RACEXX9PPCAGGWel5eHOXPm4IorroDT6YRWq8WSJUvgcDjw7rvvQqfToUePHti2bRsWL16MqVOnRnJqBEEQIRGv839w9EvvpzCybWLWmZFuTEdZQxm2n9qOkfn+KdZSa9H/TvxPWPYVKlLhFsm+R6r4ePGB3wqo4uJg7NOn0XEahQ7Mbn7eWiMXa7LnW269fD/3MxTXz1lG1IJpKyoqsGTJEgwePBhaLfehX7duHYYOHQqdTuz0OGrUKBQXF6OyslLxPHa7HVarVfYiCIKIFEaNEWpG/NY8c8BMDMgY0IozCj83duOqnQYqi69XiVVYq+xVwrKvtcmitwhihY/tiQSq+LZhdVCZ/LNzpL2HcNXbQKbXdVR+gPupIIzPdiIuVGbPno24uDikpKTgyJEj+Oqrr4R9JSUlyMiQR8rz6yUlyt1K582bB4vFIrxympOWRhAEESIqRoXC5EJh/fz257fibCIDHyxb7VAWKoeth4VlqVAxafwfxNP7TwcAWcXecNOarp+mknTzzbJ1mSVIFwd0Hccts97qtvrwtmFwVVbi5Ny5qFu/ofHBMUqThcqcOXPAMEzQ1549YknmWbNmYevWrVixYgXUajVuueWWZjfBAoCHH34Y1dXVwuvo0aPNPhdBEEQo9EkTzfy+Df7OBCw6TqhY7aKFWloX5mD1QWwt2wqAK3zHo2L8HyG8JSWyQiVAHZEYJOOhWbJ1T63PffFpkojUTmG7tsdmw76iwahaugxHJk+Gs7QsbOeOJk2OUZk5cyYmT54cdEyHDh2E5dTUVKSmpqJLly7o1q0bcnJysH79ehQVFSEzMxOlpaWyY/n1zEz/6oMAoNfrodcrN4MiCIKIBOM7jscnez4BID7UzyR4i0qFjas4y7Is7v7xbtmY5QeXo196P9RJuv26PC6/cwnp3A7lGBKXxwWNqmXhkQkXD0f9uvVgFFwrsQaj1aLgq69Qu2YNTi1eLFhUWJbl6r+Y5eX2kRE4i6ip1P22TrZuXb4cKbdODtv5o0WTPy1paWlIU4hkDgWPh+tZYLdzxYCKiorw6KOPCsG1ALBy5UoUFhYiKenMbFdNEETbo2dqT7x1yVtcvIoqcJZHW4UXKoeth7Hqr1XokdoDG0s2ysZsKNmAcV+Mk7l+PL59aADEeYNBj9Ycxe+lv6Nvel/B8vLor49i7bG1+Hjsx34F55pC0oQboUqIh2ngwGafI5oYCruAtTXgFDiLyrHp98Nx8ADyP/sMqqQ8+eAwWlTc1XJXXtnzzyN54gQwkrjQtkDEYlQ2bNiAV199Fdu2bcNff/2F1atX48Ybb0THjh1RVFQEAJgwYQJ0Oh2mTJmCXbt2YdmyZXjppZcwY8aMSE2LIAiiWQzOGnxGZftIyTSJFuwXtrwgFHSTcqj6kCxWBVDOiOItKuW2ckz6fhL6fNAH1fZqsCyLrw98jUp7JZ7f9LzsmKaGAzBqNRKvuAK6cNVUiQJ8/x/niROo+eEH2Pfth23nLv80ZUNi2K6plBlVunBR2M4fLSImVEwmEz7//HMMHz4chYWFmDJlCnr37o01a9YIrhuLxYIVK1bg0KFDGDBgAGbOnInHH3+cUpMJgiCiSKIhEa9ezBWzO1pzFAeqDzR6zEU5F+Gqzlf5bfetYgsAn+79FJV2MZNzw8kNcLqdAICdp3di6LKh+HTvp82dfptAreAlYB0OsUItT3PaAQSAFyrSInmVH34YtvNHi4jVUenVqxdWr17d6LjevXtj7dq1kZoGQRAEEQIX5lyIdnHtcLLuJNYeC/4/+aNLP5IFGEvJisuCTqWDwyMG4y4rXob+6f2F9QZXA47VHkOBpQDPrH8GVfYqPLXuKVzb5drwvJkYRJWQAKjVgNstbHNXKZfhCBe8UNEVFMB5TOz8LcTHtBGoKSFBEAQBAOiVygVyfn/4+6Djeqf2DrhPrVKjfYI8QLSkrgTrT66XbeP7AblZN84GGIbxs6q4q6q4hbRuEbkmL1T0neRxL44DjVvMYgkSKgRBEAQArsmiLymGFBRYxEaAiy5c1Oi38RSDfwq3n1Bxc0LFoDb4jT1T0SQlytbdfGHTa94F0rsD174f1ut56rlUcnUy181Z17EjAKD+98j0YYoUJFQIgiAIAMDI/JGyirJPDX4KP1//M+YNmSds821EqIRvV2UAQh0WngZXAwB5fyCr48yuNK5OlFtUXLxQyegO3LMO6HFFWK/HW1RUcXHQtmsHU3/O/eYqOxXW60QaEioEQRAEAK7vT4/UHsJ6mokrRSEtle/b30eJXHNuo2N41480xfnzvZ+HPNe2iManErvg+gkzbqsV1uXLUfPjjwAAtbeSL98k0XWKhApBEATRRsmKyxKW04zcg02ahhxKx+jJPSYj3chVXO2UKI+P4I9vcDXgnR3vyOq1bCnd0vyJtwHUFnlGlLuyKuzXqPnxR+w9dxCOz5gJeGuX8anRmnQSKgRBEEQbR6cWi4HxlhGpRSWUbBGL3oJV163CH5P+wA2FN8j28UKoyl6Fl7e+LNu3u2J3s+fdFmBd8kq+7gDNd1vCiUcela2rExNhOu88AIAmnROPrrK2VUqfhApBEAQhcEPhDUg3puOxQY8J1g+D2gAGnEDJjm9akTXf3kh8RtD8jfP9xpbWl8Lutjdn2m0C3+ybSLh+GI286kjOW29C5a1dpknmYociIZAiScTqqBAEQRBtj05JnbDqulWybQzD4Lcbf4PT4wwpRkWKNLDWqDEqBtpKsdqtQmzMmUbS9dfBVVYGXV4uTj7294gIBsYg9sJLvOF6GPuI9W5UZs715FtaP9YhiwpBEATRKPG6eCQZmt6DTWpRSTWmBkxHTtBx2UTlNv/y/WcKjE6H9JkzkDBiBAAuK4d1OBo5KnRYlgVcYl2ahBGXyParEzmh4qmt9XNDxTIkVAiCIIiIkRUvBueek3mOLAZGCt/v57pvrgMAVNurFZsengmozGZAxT1+XWF0/zRs2QJXWRkYnQ6d//cr4oecL9uvNpuFZXdNTdiuG2lIqBAEQRARQ6vS4r1R7+GSvEtwT597YNaZFcfVOmsBACxY/HD4BwxZOgQf/tn2+tKEAqNSCRlALc38sR84gOMzZsK+fz/qt3CF3OKHXwxNin/RPUajgSqey+CKVGp0JCChQhAEQUSUgZkDsXjYYmTEZWBcx3GNjn9wzYMAgEWb216n31Dhy+m3NE6l5KmnYV2+HIeuuhqOgwcBAIbCwsDX9Qokj7XtFNcjoUIQBEFEjaz4LOy4ZQeWX7kcX13+FQxqA27tcavi2EDWl+ZQ46gROjbHAoJQCcGywbvFlHCVlnJjHA7YDx0CAOjyCwKO54WKqw1l/pBQIQiCIKIKwzDIMeegQ2IH/O/G/2HGwBl44cIX/MZZHVYUVxS3+HpWhxXnf3I+rvr6qhafK1zwRdga66Bc8fHH2HteERp27FDcz/fvAQDH4cMAAG1Wu8DXTUvlrlvedoKWSagQBEEQrQYfXDsyfyTOyTzHb//n+1peVn9b2TawYHHYejhmAnQ1yZxFxXU6uGCo+e57eKqrUbduvfIAj/h+eHeONGjW77qpnFApfX5BUEtNLEFChSAIgogJEvWJwvJ57bhqqkdrjrb4vNKy/1Z7bMRm6PLyAECIKwkEbyVxlZ9W3M93SJai8inVL4Uv+uaxWmH7449QptrqkFAhCIIgYgJpTMpFORcBCI9QcXrE2JQKe0WLzxcO9J07AwDs+/Yp7q/93/9w+o03hL48bgXLi6uyEvUbNvhtD2ZRcZ0SBU9bqVBLQoUgCIKICeK1YvPD3mm9AQDHao61uKw+36kZACoaYkOo6Aq4gFfHsWOK+088OAunXhJ7IblO+1tUyp5f4LdNlZAARq0OeF3LlVcKy22lQi0JFYIgCCImUDHiI6lLUhckG5LhYl3YXd6yZoUNrgZhucIWG0KFz75hGxrAOuXZSJ76ej9rR8P27fDYRcHGsiwadvq7bjyNFHKLG3Qu9F26AABc5bFxLxqDhApBEAQRE7AQgzt1ah36pvUFAPx24je89PtLmPHzDL9g2PUn12Nb2bag55UKlVMNp8I235bAF14DAHdtrWyfdcUKv/Gs3Y5j9/5NWC+bPx+O/Qf8xpkGDWr02qbzuDG1v6wJeb6tCTUlJAiCIGKSEXkjsProanx94Gscrz0OANhdvhs9UnsAAMobynHHijsAANtv2S6zyEiRCpUTtSciPOvQYNRqqOLi4Kmr47J1ksQ+SifnPKx4TN3atahbvx7HZ8yEu0JuDWn/4j/gsdkQVzS40WtrkrmqtfXr1sNdWwu1RDTFImRRIQiCIGKCLkldZOvdkrsBgCBSAKDaIcZVnKw7KSzXOAK7PKQxKtJjWhtVAteI0V1T28hIkSOTb/UTKbr8fJhHj0biFVdAm5He6Dksl48Xll0lJSFfu7UgiwpBEAQRE4ztMBYVtgr0T+8PgOvY7MupetF1I403sTqssOiV03KlFhWp6Glt1AkJcJWUwFMjT5lWmUyKaceByJz7RJOuq23XDroOHeA4eBCu8groOzXp8KhDFhWCIAgiJlAxKkzqMQm90noBkGcB8UhjTKSi5dO9nwY8r1SonG5QrkfSGqi8acRuq2gNYlkWHhtnAdLm5cLQo0ej5+Gr3DYFtbfgnLsi9ivUklAhCIIgYhKT1gQGjGxbWX2Z4vJ7O99DvVPZClFaXyosV9oqY6Yiq5p3/VhFdxZrswnVZgs++xz5//kUmU89Gfw8zRAqfJyKqyL2M39IqBAEQRAxiYpRIU4bJ9tW6xDjOaQCBAA2lmz0O4fdbcfaY2uFdafHiTpnnWzMtrJtGPHpCKz8a2U4ph0y6lROLEj77nj4DCCGgSrOBIZhkHTddch5521hjKF3byTecL14nuZYVFKS/a4dq5BQIQiCIGIWX6EiFRm+QqXSJtYe+Xj3x+j7QV88s/4Z2Nw2JOmTYFAb/MYBwP0/3Y/S+lLM+HlGuKcfFG06F/jqLBXfh6eOe3+quDgwjGhN0mZnC8txgwaBdYi1V1QGQ5OvzddxcVfHRkuBYJBQIQiCIGIW3ziVOlcdnB4nlu1Zhg0n5eXj/7HlH5i1ZhY8rAfzNs6Dm3Xjy/1fAgC6JndFkoGLy6i0y4VKSyvfNheNV6i4ysRYG3etV6j4pAxr27cXlg29e4F1OFp0bd7t5KkNXiAuFiChQhAEQcQsCboE2Xq9sx5L9yzFMxuekfXwATgB8v3h77G/ar/feYa0HyI0PayyV8n2qVWBS85HEkGoBLCoSFHpdEieNAnxF1+MhAsvbLFQUcU3PTW6tSChQhAEQcQs1xVeJwuorXPWYVPJJtmYkXkjZetOt1zA3NXnLkzsNlEQPb41V9RMKwmV1FQAgEsSJ+KurgIgWjykZDw8BzmvvwZGp4N5zGgAYs+gpqJO4Cw2jZXcjwWojgpBEAQRs4zrOA7ntz8fx2uOY8LyCah11spK7cdp45BiTJEdU+8Ss3/GdhiLaX2nARCtM9KAXAABK9pGGnWyN6BV0tfHXVXF7ZNUqlUiYfRo5KWmCn17mgrvWnLX1sJZWgpNcjIYrbZZ54o0ZFEhCIIgYppkQ7IgMuqd9bL04gxTBvRqvWx8eYNooXh68NPCMh/vUlpfiipblbC91YRKIidGWJtNKPDmrqr27ksMeizDMDCdc44QFNtUeNePffdu7L9wGE7MntOs80QDEioEQRBEzMNn/9S76mWNCdNN6X5Cha+vYtQYoVWLVgJe7LzzxzsY9+U4fLLnE1z19VWyeizRRBVnAqPTARCtKvzP5qQcNwXe9cNjXb48otdrCSRUCIIgiJiHL6fvYT2odYqumyRDkp9Q4avXmnVmxXMAXEDtcxuew77KfZGacqMwDCO4eI7+7W9g3W7R9RNhocJXxW0LkFAhCIIgYh6jxogkPfdQ31q2VdieZkwLaFHx7f2jVJK/teGFiv3P3ahd84skRiUxotfVNBIDE0uQUCEIgiDaBFnxWX7bUowpAYWKr0XFN9VZCd+U50gjFSSswx411w+j04ExmWTbWpryHCmiIlTsdjv69u0LhmGwbds22b4dO3bgggsugMFgQE5ODhYsWBCNKREEQRBtjHRTut+28R3HQ6fWybZtLt0MwN+i0iOl8QZ/0gaG0YDRiDE0ZS8shm3XLgCRFyoAwKjkEsBdG5s1VaIiVB566CFkZfkrYavVipEjRyIvLw9btmzBwoULMXfuXLz99tsKZyEIgiDOZkblj5Kt/3zdz0g1psLFuhTH+wqVwuRCLL1sadBrNDijLFQkYsF59ChYJ2fRaQ3XjMcam+X0Iy5UvvvuO6xYsQKLFi3y27dkyRI4HA68++676NGjB2644Qbcd999WLx4caSnRRAEQbQxxnYYi8XDxOcDXz9Fmo4sxdf1A3BWlScHB+5GHG2LSvzwixW3R8OikjLlNkDST8gdo8XfIipUSktLcccdd+DDDz+EyccXBgDr1q3D0KFDodOJZrtRo0ahuLgYlZWVfuMBzo1ktVplL4IgCOLsYHjucPyt39/wr5H/ErYFcun4WlR4fGNapERbqCRefTWg9q+M29z6KE0h5a670PnXtULROHeMPk8jJlRYlsXkyZNx1113YeDAgYpjSkpKkJGRIdvGr5eUlCgeM2/ePFgsFuGVk5MT3okTBEEQMYuKUWFq76k4t925wrYh7YfgxWEv+o3NivMPOQAgdFFWIuoxKmo1km64wX+7TqcwOszXZhhoUlKgMnsbFJ4pFpU5c+aAYZigrz179uCVV15BTU0NHn744bBO+OGHH0Z1dbXwOnr0aFjPTxAEQbQtGIbB8Lzh6JPWR7b9kvxLFMfrNbFjUQH8GxDqO3eO6vXVCZyLzG21wl1bh7oNG8F6PI0cFT2a3Otn5syZmDx5ctAxHTp0wOrVq7Fu3Tro9fIPxMCBAzFx4kS8//77yMzMRKmkayQAYT0zM1Px3Hq93u+cBEEQBPH0+U9j/JfjAQBXdLoCWpVy7xqp6+f2Xrfji31foNzGxbnEglDJWvB8dK8vNCisxbF770X9+vXIePzvSJ4wIarzCESThUpaWhrS0tIaHffyyy/jmWeeEdZPnDiBUaNGYdmyZRg0aBAAoKioCI8++iicTie03mZIK1euRGFhIZLaUDEagiAIovUpsBRgw4QN2FSyCee3Pz/gOKnr55yMczC9/3TcufJO/Hbit1YRKhqfZ6oqIbpVYwWLSo0V9evXAwBKn34GlR9/jNS77oblsrFRnY8vEYtRyc3NRc+ePYVXF2+wTseOHZGdnQ0AmDBhAnQ6HaZMmYJdu3Zh2bJleOmllzBjxoxITYsgCII4gzFpTbgw50JoVIG/h0tdP8lGroOxUWMEwDU9jDbxFw6Vrast0RUqQoyKVRKjwrJw7D+AEw8+GNW5KNGqlWktFgtWrFiBQ4cOYcCAAZg5cyYef/xxTJ06tTWnRRAEQZzBSF0/KQYuxZkXKq1iUUlJQeZTYsq0ryso0ogWFeVg2prVq6M5HT+a7PppLvn5+bLW3Dy9e/fG2rVrozUNgiAI4ixHzYjpwImGRACAScOV0Kh3Rd+iAgBJ110HQ48eUOn1fhVjIw1vwXEHKAty8vEnkHCxcr2XaBA1oUIQBEEQsUB2QjZu7XkrEvWJQsAtL1je2P4GhucOR2FyYdTnZezReIn/SKD1Vo63HzyguF+TnBzN6fhBTQkJgiCIs44ZA2bgtp63CeupxlRh+YnfnmiNKbUa2pxcAIDrxEnF/dEoPhcMEioEQRDEWY9UqByqPtSKM4k+2swMQBPYwWLbvTuKs/GHhApBEARx1pOoTxSWnR5n602kFWA0GmhSUgLu99TWouwfL0ZvQj6QUCEIgiDOetKMYi0TjUqD1UdWo9pe3Yozii6NuXf0XaJbLVcKCRWCIAjirCffko/p/acD4FKUp/80HdN/mt7Ks4oewbo1a9LSkDB8ePQm4wMJFYIgCIIAcHP3m2XrW0q3YPHmxa00m+gSyKKStWgROiz/L1SGwI0cIw0JFYIgCIIAVwjOtz/Qe7veg81lC+l4l8eF3078hhpHbHYhDkYgi4omNQXqhIToTsYHEioEQRAE4SVB5/9QrnPWhXTsNwe+wZ0r78S9q+5Ftb0aV351Jd7e8Xa4pxgR1ImiRSVh9GhhWWUytcZ0ZJBQIQiCIAgvfIVaKaFWq/324LcAgN/Lfse7O9/F/qr9eGXrK2GdX6QwDToPAMDo9ch87FGkz5kNy1VXwdC9eyvPjCrTEgRBEITA6YbTfttCbVSYa87FxpKNAIDP9n0W1nlFmvgh5yP/03+DUauhSU1FyuTJrT0lAbKoEARBEISXWefM8tsWqkVFKmjaYmqzsVevmLCg+EJChSAIgiC8XFd4HT669CPZtlBjVNqiOGkLkFAhCIIgCAm9U3vL1kN1/VTZqyIwG4KECkEQBEFIYBgGc86dI6yHalEJJFQ8rCcc0zprIaFCEARBED5M7DYRo/JHAQBK60tRXFHc6DGBXD92tz2sczvbIKFCEARBEArwNVVe2/YarvnmGuw4tSPgWKfHiVpnreI+u4uESksgoUIQBEEQChSYC2TrfJ0UJXhrCgMG13W5TrbP5g6tsi2hDAkVgiAIglCgU1In2brb4w44dl/lPgCAWW/GnHPn4JOxn8CoMQIg109LIaFCEARBEAr0SesjWz9eezzg2PtW3weAs6xo1Vr0TO0pCJVQewURypBQIQiCIAgF4rRx2H7LdtzU7SYAQI0zcLNBJfeOXq0HADjcjshM8CyBhApBEARBBEDFqHBhzoUAgtdT4bsuT+8/XdjGCxWKUWkZJFQIgiAIIgh8o8JAQoVlWWF5bMFYYTleGw8AsDqsEZzdmQ8JFYIgCIIIQpw2DgBQ51Iu/GZz2+D0OAFwwbQ8GXEZAIDSutIIz/DMhoQKQRAEQQSBFyqBLCpWO2cxUTNqwfoCAO3i2gEA5m2chwNVByI2P5fHJbPqnGmQUCEIgiCIIJi0nPhwepxwup1++2scXJCtWWcGwzDC9sy4TGH51u9vDauYcHlc+GLfF9hVvgtjPh+D3h/0xqtbX8Uz65/BtrJtYbtOLKBp7QkQBEEQRCwjtZLUOeuQqE6U7eezgeJ18bLtvdPE5oaV9kqU28qRakwNy5y+3P8lnlz3pGzbWzveAgAsK16GPyb9EZbrxAJkUSEIgiCIIGhUGiGDp97l7/5pcDUAkAsaAOiX3g+LLlwkrFfYKsI2p1+P/xq2c8U6JFQIgiAIohGEgFqFTsp8QTe9Ru+3b1T+KHS0dAQAVNoqQ77eidoTcHlcAffz6dBnAyRUCIIgCKIR+CqzwYSKUW1UPDbJkAQgdIvKtrJtGPXZKMxaMyvgmFMNp4TlH6/5MaTztlVIqBAEQRBEIwTL/OF7+Rg0BsVj+WDcZzc8G9K1fjvxGwDgxyM/4mjNUcUxpxtOAwBevfhVIQ1ayvTV03Gw+mBI14t1SKgQBEEQRCMIQiVIjAofx+KLmlED4PoAhZL542E9wvLmks246uur8OCaB4VaLYDoRspOyFY8x+qjqzF99XTFfW0NEioEQRAE0Qi8VaTOWYcaRw1u/f5WTFs1DfXOeqFEfiCLCt8rCIBi3Mneyr1Y9dcqAFyHZj57BwA+2/cZ9lXuww+Hf8C6E+sAcGnSfLVb3q30/uj3/c572Hq4qW8zJqH0ZIIgCIJoBD6jp85Zh40nN2Jz6WYAXPaN3cW5fvg4Fl/6pItdmG1uG7RqMRC2pK4EV399NQBg6dilOFF3Qnbs9lPbheVT9VxcyqaTm4RtFp0FANA/o7/fdRkwftvaImRRIQiCIIhGkLp+qh3Vwvbtp7ajwR3c9aNT6QTRwMezAMAR6xFc8p9LhPV9VfsEMaIEb0W588c7hW1qlVpYXn7lctl46b62DAkVgiAIgmgEXqj8ceoPPPHbE8L2Q9WHhKyfQK4fhmHETsousZPy6iOrZeMcbocQzwIA+eZ82f6y+jJ8vu/zgHPMMefI1l0eF1YdWRVwfFuBhApBEARBNALv+ll9VC4u6px1+GTPJwACu34AscaK1KLCx73wPL3+aSzaLBaIu6bLNbL9H+3+SCaSHhz4oN913hzxpmz9/p/uDzintkJEhUp+fj4YhpG95s+fLxuzY8cOXHDBBTAYDMjJycGCBQsiOSWCIAiCaDK+5fF59lXtE5aDFXTjLSpSoVLrrPUbxwfmTuo+CWnGtKBz6pPWx29bijEl6DFtkYhbVJ566imcPHlSeP3tb38T9lmtVowcORJ5eXnYsmULFi5ciLlz5+Ltt9+O9LQIgiAIImRG5o1U3M43JASUhQOPQc25haRCpcpWFXC8WW9GsjE56Jzitf7iKdngf0xb76wc8ayfhIQEZGZmKu5bsmQJHA4H3n33Xeh0OvTo0QPbtm3D4sWLMXXq1EhPjSAIgiBCIjshG33T+mLbqW0BxwzPHR5wH+/6kcaoVNo5C0xhUiGKK4tl4806s6IQkaJk5eHTlaXY3LagbqlYJ+IWlfnz5yMlJQX9+vXDwoUL4XKJOeTr1q3D0KFDodPphG2jRo1CcXExKiuVTWh2ux1Wq1X2IgiCIIhIk2vODbjv/Kzzg2bZKFlUyhvKAQAdEzv6jU81pqJjYkekGAK7cnxjXACuB9Brw1+TbVMq+9+WiKhQue+++7B06VL89NNPuPPOO/Hcc8/hoYceEvaXlJQgI0Ne+pdfLykpUTznvHnzYLFYhFdOTo7iOIIgCIIIJzkJ4vPGt8CaRW8JeqyQ9eO2wcN6UOOowcm6kwCArsld/caf1+48GDVGLL9qOdZcv0bxnHGaOMXteeY82foHuz5o0+6fJguVOXPm+AXI+r727NkDAJgxYwaGDRuG3r1746677sILL7yAV155BXa7vZGrBObhhx9GdXW18Dp6VLkPAkEQBEGEE2m5+qz4LNk+JZeLFN71M2vNLPT5oA8GfzIY+6v2AwC6pXTzG8+7dUxak2LciVFjDGjB8Z3Le7veEwrUtUWaHKMyc+ZMTJ48OeiYDh06KG4fNGgQXC4XDh8+jMLCQmRmZqK0tFQ2hl8PFNei1+uh1ysX1SEIgiCISCF1wyQZkqBRaYSS+En6RoSKKvBzq2uS3KLy8aUf+425seuNQho0wFlcAmHWmf22HbEewTmZ5wSdY6zSZKGSlpaGtLTgKVOB2LZtG1QqFdLT0wEARUVFePTRR+F0OqHVciWFV65cicLCQiQlBf+lEwRBEEQ06ZHaAwAXb6JX65FsSEZZfRmAwM0BeXwtMDypxlRY9Bakm9JRVl+G90e/j15pvfzGPTLoEUzpOQUj/jMCAHBtl2ubNPdaZy0aXA3QqXRtrmJtxGJU1q1bhxdffBHbt2/HwYMHsWTJEjzwwAO46aabBBEyYcIE6HQ6TJkyBbt27cKyZcvw0ksvYcaMGZGaFkEQBEE0C7POjB+v+RErrlkBQF45NjchcKAtAEzvr9zJOCs+CwzD4P3R7+OL8V8o9uwRrq8XLSW903oHvV7/dPl5Fm1ehBGfjsCdK+8McETsErH0ZL1ej6VLl2Lu3Lmw2+0oKCjAAw88IBMhFosFK1aswLRp0zBgwACkpqbi8ccfp9RkgiAIIibJiBMTQNrFtROWg2UEAVx5/dH5o/H94e9l29vHtQfQuEUG4OJS3rrkLWhV2kaDd18b/hp2le/C3sq9WLCJK6RqdVixoWQD3B53m7KqMGxbDgUGVzTOYrGguroaZrO/X44gCIIgIsGqv1bh/p/vx8RuEzHn3DmNjq911KLokyLZttt63oYHBjwQqSmixlGDwZ8Mlm376bqfkGpMjdg1QyXU53fEC74RBEEQxJnI8LzhWD9hvdCwsDGUxp2beW64pyUjQZeAAksBDlUfEradbjgdE0IlVKgpIUEQBEE0k1BFCsB1UZYyvuN4FGUVBRgdPvhiczyn6k9F/JrhhCwqBEEQBBFlHhz4ICb1mBSVa/GNDnnKbeVRuW64IIsKQRAEQUSJ6f2no396/yanF7eEBleDbL3eWR+1a4cDsqgQBEEQRJS4vdftuL3X7VG9pp9QcbUtoUIWFYIgCII4g5F2bAbankWFhApBEARBnMFIOzYD/haWWIeECkEQBEGcwSwethiAWKCOXD8EQRAEQcQMl+Rdgg0TNghZRqV1pY0cEVuQUCEIgiCIMxyT1gSTxgQA+N+J/+Ev619Bx5+sPennMmotSKgQBEEQxFmAUWMUlr/a/5Vs39I9S3Hf6vtQXFGM3eW7MeqzUZj9y+xoT1ERSk8mCIIgiLOASnulsCwVLTWOGjy74VkAXIfoRH0iWLBYdWQVfj3+K4a0HxL1uUohiwpBEARBnAUMyBggLFfYKgBwjRLf3P6msP2rA1/htO20sP6fvf+J3gQDQEKFIAiCIM4CuiR1wZWdrgQAfLT7I7g8LsxdNxcf/PmBbNx/D/5XWK60VaK1IaFCEARBEGcJ4zuOF5b/OP0Hfjn2S9DxUndRa0FChSAIgiDOEgZmDoRWpQUALCteJhR/m32OcuDsoepDWH5wedTmpwQJFYIgCII4iyjKKgIgungGZAzAuI7jZGO6p3QXlmevnQ2rwxq9CfpAQoUgCIIgziKSDcl+6xa9ReYWitPGycZsKtkUlbkpQUKFIAiCIM4iUgwpsvV7+94LAHh2yLPCNrfHLUtL3nByQ3QmpwDVUSEIgiCIswipReWOXnegQ2IHvzEOtwP/N/r/sK9qH07Xn0a/jH7RnKIMsqgQBEEQxFlEijFFcRkACpMKAQBjCsaAYRh0SeqCwe0HywrERRuyqBAEQRDEWYTUouLrBnpn5DvYWrYVQ7OHRntaASGhQhAEQRBnEVIrSpIhSbYvyZCEi3MvjvaUgkKuH4IgCII4i5BaVCx6SyvOJDRIqBAEQRDEWUSSXrSipBpTW3EmoUGuH4IgCII4i1Cr1Hhn5Duod9aTUCEIgiAIIvY4r915rT2FkCHXD0EQBEEQMQsJFYIgCIIgYhYSKgRBEARBxCwkVAiCIAiCiFlIqBAEQRAEEbOQUCEIgiAIImYhoUIQBEEQRMxCQoUgCIIgiJiFhApBEARBEDFLRIXKf//7XwwaNAhGoxFJSUm44oorZPuPHDmCsWPHwmQyIT09HbNmzYLL5YrklAiCIAiCaENErIT+Z599hjvuuAPPPfccLr74YrhcLuzcuVPY73a7MXbsWGRmZuK3337DyZMnccstt0Cr1eK5556L1LQIgiAIgmhDMCzLsuE+qcvlQn5+Pp588klMmTJFccx3332Hyy67DCdOnEBGRgYA4M0338Ts2bNx6tQp6HS6kK5ltVphsVhQXV0Ns9kctvdAEARBEETkCPX5HRHXz++//47jx49DpVKhX79+aNeuHcaMGSOzqKxbtw69evUSRAoAjBo1ClarFbt27Qp4brvdDqvVKnsRBEEQBHFmEhHXz8GDBwEAc+fOxeLFi5Gfn48XXngBw4YNw969e5GcnIySkhKZSAEgrJeUlAQ897x58/Dkk0/6bSfBQhAEQRBtB/653ahjh20Cs2fPZgEEfe3evZtdsmQJC4B96623hGNtNhubmprKvvnmmyzLsuwdd9zBjhw5Unb+uro6FgC7fPnygHOw2WxsdXW18Przzz8bnRO96EUvetGLXvSKzdfRo0eDao8mWVRmzpyJyZMnBx3ToUMHnDx5EgDQvXt3Ybter0eHDh1w5MgRAEBmZiY2btwoO7a0tFTYFwi9Xg+9Xi+sx8fH4+jRo0hISADDME15O41itVqRk5ODo0ePUvxLBKH7HB3oPkcHus/Rg+51dIjUfWZZFjU1NcjKygo6rklCJS0tDWlpaY2OGzBgAPR6PYqLizFkyBAAgNPpxOHDh5GXlwcAKCoqwrPPPouysjKkp6cDAFauXAmz2SwTOI2hUqmQnZ3dlLfRZMxmM/0RRAG6z9GB7nN0oPscPeheR4dI3GeLxdLomIjEqJjNZtx111144oknkJOTg7y8PCxcuBAAcO211wIARo4cie7du+Pmm2/GggULUFJSgsceewzTpk2TWUwIgiAIgjh7iVgdlYULF0Kj0eDmm29GQ0MDBg0ahNWrVyMpKQkAoFar8e233+Luu+9GUVER4uLiMGnSJDz11FORmhJBEARBEG2MiAkVrVaLRYsWYdGiRQHH5OXlYfny5ZGaQovR6/V44oknyMITYeg+Rwe6z9GB7nP0oHsdHVr7Pkek4BtBEARBEEQ4oKaEBEEQBEHELCRUCIIgCIKIWUioEARBEAQRs5BQIQiC9wpShwAACRpJREFUIAgiZiGhEoDXXnsN+fn5MBgMGDRokF8VXSI48+bNwznnnIOEhASkp6fjiiuuQHFxsWyMzWbDtGnTkJKSgvj4eFx99dVCdWKeI0eOYOzYsTCZTEhPT8esWbPgcrmi+VbaFPPnzwfDMLj//vuFbXSfw8Px48dx0003ISUlBUajEb169cLmzZuF/SzL4vHHH0e7du1gNBoxYsQI7Nu3T3aOiooKTJw4EWazGYmJiZgyZQpqa2uj/VZiFrfbjb///e8oKCiA0WhEx44d8fTTT8t6wdB9bh6//PILxo0bh6ysLDAMgy+//FK2P1z3dceOHbjgggtgMBiQk5ODBQsWtHzyTen1c7awdOlSVqfTse+++y67a9cu9o477mATExPZ0tLS1p5am2HUqFHse++9x+7cuZPdtm0be+mll7K5ublsbW2tMOauu+5ic3Jy2FWrVrGbN29mzzvvPHbw4MHCfpfLxfbs2ZMdMWIEu3XrVnb58uVsamoq+/DDD7fGW4p5Nm7cyObn57O9e/dmp0+fLmyn+9xyKioq2Ly8PHby5Mnshg0b2IMHD7I//PADu3//fmHM/PnzWYvFwn755Zfs9u3b2fHjx7MFBQVsQ0ODMGb06NFsnz592PXr17Nr165lO3XqxN54442t8ZZikmeffZZNSUlhv/32W/bQoUPsp59+ysbHx7MvvfSSMIbuc/NYvnw5++ijj7Kff/45C4D94osvZPvDcV+rq6vZjIwMduLEiezOnTvZTz75hDUajbK+f82BhIoC5557Ljtt2jRh3e12s1lZWey8efNacVZtm7KyMhYAu2bNGpZlWbaqqorVarXsp59+KozZvXs3C4Bdt24dy7LcH5ZKpWJLSkqEMW+88QZrNptZu90e3TcQ49TU1LCdO3dmV65cyV544YWCUKH7HB5mz57NDhkyJOB+j8fDZmZmsgsXLhS2VVVVsXq9nv3kk09YlmWFBqqbNm0Sxnz33XcswzDs8ePHIzf5NsTYsWPZ2267TbbtqquuYidOnMiyLN3ncOErVMJ1X19//XU2KSlJ9n9j9uzZbGFhYYvmS64fHxwOB7Zs2YIRI0YI21QqFUaMGIF169a14szaNtXV1QCA5ORkAMCWLVvgdDpl97lr167Izc0V7vO6devQq1cvZGRkCGNGjRoFq9WKXbt2RXH2sc+0adMwduxY2f0E6D6Hi6+//hoDBw7Etddei/T0dPTr1w/vvPOOsP/QoUMoKSmR3WeLxYJBgwbJ7nNiYiIGDhwojBkxYgRUKhU2bNgQvTcTwwwePBirVq3C3r17AQDbt2/Hr7/+ijFjxgCg+xwpwnVf161bh6FDh0Kn0wljRo0aheLiYlRWVjZ7fhGrTNtWOX36NNxut+yfNgBkZGRgz549rTSrto3H48H999+P888/Hz179gQAlJSUQKfTITExUTY2IyMDJSUlwhil3wO/j+BYunQpfv/9d2zatMlvH93n8HDw4EG88cYbmDFjBh555BFs2rQJ9913H3Q6HSZNmiTcJ6X7KL3PfANWHo1Gg+TkZLrPXubMmQOr1YquXbtCrVbD7Xbj2WefxcSJEwGA7nOECNd9LSkpQUFBgd85+H18C52mQkKFiDjTpk3Dzp078euvv7b2VM44jh49iunTp2PlypUwGAytPZ0zFo/Hg4EDB+K5554DAPTr1w87d+7Em2++iUmTJrXy7M4c/v3vf2PJkiX4+OOP0aNHD2zbtg33338/srKy6D6fxZDrx4fU1FSo1Wq/rIjS0lJkZma20qzaLvfeey++/fZb/PTTT8jOzha2Z2ZmwuFwoKqqSjZeep8zMzMVfw/8PoJz7ZSVlaF///7QaDTQaDRYs2YNXn75ZWg0GmRkZNB9DgPt2rVD9+7dZdu6deuGI0eOABDvU7D/G5mZmSgrK5Ptd7lcqKiooPvsZdasWZgzZw5uuOEG9OrVCzfffDMeeOABzJs3DwDd50gRrvsaqf8lJFR80Ol0GDBgAFatWiVs83g8WLVqFYqKilpxZm0LlmVx77334osvvsDq1av9zIEDBgyAVquV3efi4mIcOXJEuM9FRUX4448/ZH8cK1euhNls9ntonK0MHz4cf/zxB7Zt2ya8Bg4ciIkTJwrLdJ9bzvnnn++XXr93717k5eUBAAoKCpCZmSm7z1arFRs2bJDd56qqKmzZskUYs3r1ang8HgwaNCgK7yL2qa+vh0olfyyp1Wp4PB4AdJ8jRbjua1FREX755Rc4nU5hzMqVK1FYWNhstw8ASk9WYunSpaxer2f/7//+j/3zzz/ZqVOnsomJibKsCCI4d999N2uxWNiff/6ZPXnypPCqr68Xxtx1111sbm4uu3r1anbz5s1sUVERW1RUJOzn02ZHjhzJbtu2jf3+++/ZtLQ0SpttBGnWD8vSfQ4HGzduZDUaDfvss8+y+/btY5csWcKaTCb2o48+EsbMnz+fTUxMZL/66it2x44d7OWXX66Y3tmvXz92w4YN7K+//sp27tz5rE+blTJp0iS2ffv2Qnry559/zqamprIPPfSQMIbuc/Ooqalht27dym7dupUFwC5evJjdunUr+9dff7EsG577WlVVxWZkZLA333wzu3PnTnbp0qWsyWSi9ORI8corr7C5ubmsTqdjzz33XHb9+vWtPaU2BQDF13vvvSeMaWhoYO+55x42KSmJNZlM7JVXXsmePHlSdp7Dhw+zY8aMYY1GI5uamsrOnDmTdTqdUX43bQtfoUL3OTx88803bM+ePVm9Xs927dqVffvtt2X7PR4P+/e//53NyMhg9Xo9O3z4cLa4uFg2pry8nL3xxhvZ+Ph41mw2s7feeitbU1MTzbcR01itVnb69Olsbm4uazAY2A4dOrCPPvqoLN2V7nPz+OmnnxT/J0+aNIll2fDd1+3bt7NDhgxh9Xo92759e3b+/PktnjvDspKSfwRBEARBEDEExagQBEEQBBGzkFAhCIIgCCJmIaFCEARBEETMQkKFIAiCIIiYhYQKQRAEQRAxCwkVgiAIgiBiFhIqBEEQBEHELCRUCIIgCIKIWUioEARBEAQRs5BQIQiCIAgiZiGhQhAEQRBEzEJChSAIgiCImOX/AVVJIsSwKsuIAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df1.cumsum().plot()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 条形图、柱状图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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7rcBAABwDu+mAQAAVhFGAACAVYQRAABgFWEEAABYRRgBUCvmuANwWpN8HLzTvvvuOy1evFj5+fnyeDySfn5SbGpqqsaPH6927dpZrhBoOtxut7744gt16dLFdikAzkNxcbEWLFigTz75RMXFxQoKCtJll12mjIwMjR8/XsHBwdZqa3G39v7rX/9Senq6WrVqpbS0NN/zUUpKSrR+/XodP35ca9euVd++fS1Xev4OHDigWbNmafHixbZLqdVPP/2krVu3qk2bNuratWuVfSdOnNDKlSs1duxYS9XVzY4dO/Tpp58qJSVFycnJ2rlzp5566ilVVFTotttu09VXX227xHP6/9+ufcZTTz2l2267TW3btpUkPfHEE41Z1nkrLy/XypUrtWfPHsXHx2vMmDG+vjRV27ZtU+vWrZWYmChJWrJkiXJyclRUVKSOHTtqypQpuuWWWyxXeW533323Ro8erf/7v/+zXcp5mTdvnjZv3qzrrrtOt9xyi5YsWaLs7Gx5vV797ne/0yOPPKKQkKb9t/2WLVuUlpampKQkhYeHKz8/X7///e918uRJrV27Vl27dlVeXp4iIiLsFHjOV/UGmAEDBpg777zTeL3es/Z5vV5z5513moEDB1qorOEVFBSYoKAg22XUateuXaZjx47G5XKZoKAgM3jwYHPo0CHffo/H0+T78O6775oLLrjAtGnTxoSFhZl3333XtGvXzqSlpZmrr77aBAcHm/Xr19su85xcLpfp2bOnGTp0aJXF5XKZfv36maFDh5phw4bZLvOcunTpYv773/8aY4wpKioynTp1MlFRUaZfv36mTZs2JiYmxnzzzTeWq6xd9+7dzbp164wxxjz33HMmPDzc3HPPPWbBggVm2rRp5qKLLjKLFi2yXOW5nfleX3755Wb27NmmuLjYdkl+e/TRR01ERIS58cYbTVxcnJk9e7Zp27at+etf/2r+9re/mXbt2pmZM2faLvOcBg0aZB566CHf+pIlS8yAAQOMMcZ8//33pmfPnuaee+6xVZ5pcWEkLCzM7Nixo8b9O3bsMGFhYY1YUf2tXr261mXu3LlN/oc8IyPDjBw50hw5csTs3r3bjBw50iQmJpr9+/cbY5pHGElJSTF//vOfjTHGvPzyy6Z169bmgQce8O2fMWOG+c1vfmOrvDrLzs42iYmJZwWnkJAQ89VXX1mqyn8ul8uUlJQYY4y59dZbTWpqqjl69Kgxxpgff/zRpKWlmTFjxtgs8ZzCw8PNvn37jDHG9OrVyzz77LNV9r/00kuma9euNkrzi8vlMu+//76ZOnWqufjii01oaKj57W9/a9566y1TWVlpu7w6+dWvfmVee+01Y8zPf+AFBwebpUuX+va//vrrJikpyVZ5dRYeHm6+/vpr33plZaUJDQ01Ho/HGGPMe++9Z9q3b2+rvJYXRjp16mReeOGFGve/8MILpmPHjo1X0Hk481eHy+WqcWnqP+QxMTHmyy+/9K17vV4zadIkc+mll5qvv/66WYSRyMhIs3v3bmPMz1/wkJAQs23bNt/+wsJCExsba6s8v2zevNn8+te/Nvfdd585efKkMaZ5h5HLLrvMvPfee1X2//Of/zQJCQk2Squztm3bmi1bthhjfv6OFBQUVNm/Z88eEx4ebqM0v/zvf4uTJ0+aFStWmPT0dBMcHGzat29vHnjgAd93p6kKDw/3/XFkjDGhoaFm+/btvvV9+/aZVq1a2SjNLx07djSffPKJb/3QoUPG5XKZ48ePG2OM2bt3r9U/xFvc3TR/+tOfdOedd2rq1Kl688039dlnn+mzzz7Tm2++qalTp2rSpEmaPn267TLrJD4+Xq+//rq8Xm+1y7Zt22yXeE4//fRTlWutLpdLCxYs0KhRozRkyBD95z//sVhd3blcLklSUFCQwsLCqrwyOyIiQqWlpbZK80u/fv20detWHTlyRH379tX27dt9fWtOztR84sQJxcfHV9nXoUMHHTlyxEZZdTZixAgtWLBAkjRkyBC9+uqrVfavXLlSSUlJNkqrt9DQUI0ePVp5eXn65ptvNHHiRL300kvq3Lmz7dJqFRcXp3//+9+SpN27d6uystK3LklfffWVYmJibJVXZxkZGZo0aZLy8vL04Ycf6tZbb9WQIUMUHh4uSdq1a5c6dOhgr0BrMcii5cuXmwEDBpiQkBDfCEJISIgZMGCAWbFihe3y6mzUqFHmL3/5S437CwoKjMvlasSK/NevXz/z4osvVrtv8uTJJjo6usmPjHTv3t28++67vvXCwkJz6tQp3/rGjRtNYmKijdLOy8svv2xiY2NNUFBQsxsZ6datm+nVq5e56KKLzKuvvlpl/0cffWQ6dOhgqbq6OXjwoOnUqZMZPHiwyczMNOHh4eaqq64yEydONIMHDzYXXHCBefvtt22XeU7/OzJSHa/Xe9bIVVPz4IMPmnbt2pkJEyaYxMREM2PGDHPppZeaBQsWmJycHJOQkGDuvfde22We048//mhGjx7t+91LTU2tMndq7dq1ZuXKldbqa3F30/yvU6dO6bvvvpMkXXzxxQoNDbVckX8+/vhjlZeXa/jw4dXuLy8v15YtWzRkyJBGrqzusrOz9fHHH+udd96pdv9dd92lnJwceb3eRq6s7nJycpSQkKCRI0dWu/+BBx7Q4cOHtXDhwkau7Px9++232rp1q9LS0nThhRfaLqdOHn744SrrAwcOVHp6um/9/vvv17fffquXX365sUvzy9GjRzV79my99dZb+uabb+T1ehUfH69Bgwbp3nvvbRZ3/CUmJmrLli1N/u6l2ni9Xs2ePVv5+flKTU3VjBkztGLFCk2fPl3Hjx/XqFGjNG/evGbz/Thx4oROnz6tiy66yHYpVbToMAIAAOxrcXNGAABA00IYAQAAVhFGAACAVYQRAABgFWEEAABYRRgBAABWEUYAAIBVhBEAAGDV/wMyVNnIJSZwqwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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sAAAANb4NseicE66ghnMsQCATqty5HmtVlVY5XEjsMnViMWAAQMUCATOehUVFXnVHwAASCKuRiw2bdqkxsbG5vc7duzQl7/8ZX3961+33hgAAEg+roJFnz59WrwvKyvT4MGDdd1111ltCgAAJKe451icOnVKP//5zzV79mwFAoE214vFYorFYs3vo9FovCUBAEAHF3eweOONN3Ts2DHNnDnznOuVlpaqpKTkrOUb9h1Q2Gk7kABAypgf8bsDIGECxhgTz4YFBQUKhUL6zW9+c871WhuxyMvLU2RuJsECQOdAsEAKiEajysrKUiQSUTgcbnO9uEYs9u3bp7fffltLly793HUdx5HjOPGUAQAASSauG2S9+OKLys7O1uTJk233AwAAkpjrYNHU1KQXX3xRhYWFSk/37f5aAACgA3KdDN5++23t379fd955Z7sKjzhZrjTTrV37QOdRU8boGAAkA9fB4qabblKc8z0BAECK4yFkAADAGoIFAACwxrfZlztKCs55HSwAAEg+jFgAAABrCBYAAMAaggUAALCGYAEAAKwhWAAAAGsIFgAAwBqCBQAAsIZgAQAArCFYAAAAawgWAADAGoIFAACwhmABAACsIVgAAABrCBYAAMAaggUAALCGYAEAAKwhWAAAAGsIFgAAwJp0vwrvGj1GPYJBv8qnrGE7q/1uAQDQiTFiAQAArCFYAAAAawgWAADAGt/mWBTOSVcwgzkW1lWO9LsDADgvVYVVfrcAD7gesTh48KBuv/12XXDBBcrIyNDIkSO1efNmL3oDAABJxtWIxccff6zx48drwoQJeuutt9SnTx998MEH6tWrl1f9AQCAJOIqWDz55JPKy8vTiy++2Lxs4MCB1psCAADJydWpkF//+tcaM2aMvv71rys7O1tf+MIXtHjx4nNuE4vFFI1GW7wAAEBqcjVisWfPHi1atEizZ8/WI488ok2bNumBBx5QKBRSYWFhq9uUlpaqpKTkrOUb9h1Q2AnE1zUAwD/zI353gA4sYIwx57tyKBTSmDFj9O677zYve+CBB7Rp0yatX7++1W1isZhisVjz+2g0qry8PEXmZhIsACAZESw6pWg0qqysLEUiEYXD4TbXc3UqJCcnR5dddlmLZcOGDdP+/fvb3MZxHIXD4RYvAACQmlwFi/Hjx2vXrl0tlr3//vu65JJLrDYFAACSk6tg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/UhZWVme1udUCAAAKaKhoUH//d//rf/8z//U9u3bm19//OMflZubq1deecXzHhixAAAgRSxfvlwff/yx7rrrrrNGJm655RaVl5fr29/+tqc9MGIBAECKKC8v18SJE1s93XHLLbdo8+bN+tOf/uRpD4xYAADgQke+K/BvfvObNn82duzYhFxyyogFAACwhmABAACsIVgAAABrCBYAAMAaggUAALCGYAEAAKwhWAAAAGsIFgAAwBqCBQAAsIZgAQAArOGW3gAAuDHf28eOn10v4nqTmTNnqrKysvl97969ddVVV+mpp57SqFGjbHZ3FkYsAABIQTfffLMOHz6sw4cPa/Xq1UpPT9eUKVM8r0uwAAAgBTmOo379+qlfv3664oorNHfuXNXW1urDDz/0tK5vp0J2jR6jHsGgX+XRimE7q/1uAQDggePHj+vnP/+5hgwZogsuuMDTWsyxAAAgBS1fvlw9evSQJJ04cUI5OTlavny50tK8PVnBqRAAAFLQhAkTtH37dm3fvl0bN25UQUGBJk2apH379nlal2ABAEAK6t69u4YMGaIhQ4boqquu0vPPP68TJ05o8eLFntb17VRI4Zx0BTOYY9GhVI70uwMAFlQVVvndAjqgQCCgtLQ0ffrpp57WcT1isW7dOk2dOlW5ubkKBAJ64403PGgLAAC0RywWU11dnerq6lRdXa37779fx48f19SpUz2t63rE4sSJE7r88st155136mtf+5oXPQEAgHZauXKlcnJyJEmZmZnKz8/X66+/ruuvv97Tuq6DxaRJkzRp0iQvegEAoOOL406YiVZRUaGKigpfans+xyIWiykWizW/j0ajXpcEAAA+8TxYlJaWqqSk5KzlG/YdUNgJeF2+c0iC9AwA6Bw8v9y0uLhYkUik+VVbW+t1SQAA4BPPRywcx5HjOF6XAQAAHQA3yAIAANa4HrE4fvy4du/e3fx+79692r59u3r37q3+/fuf935GnCxXmunmtjxaM3eF3x0kRE3ZZL9bAAB8DtfBYvPmzZowYULz+9mzZ0uSCgsLfbu0BQAAdAyug8X1118vY4wXvQAAgCTHHAsAAGANwQIAAFjj29NNd5QUKBwO+1UeAIC4jEzwk6DjfVptXV2dFixYoBUrVujgwYPKzs7WFVdcoQcffFA33nij5S7/xrdgAQAAvFFTU6Px48erZ8+e+o//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e3dzqJOk999/Xzk5OYSKOMRzDD755JOzwsOZoGd4pFVCWPs+djev9PMtWbLEOI5jKioqzHvvvWe+9a1vmZ49e5q6ujpjjDF33HGHmTt3bvP6f/jDH0x6erp5+umnTXV1tZk3bx6Xm7aD28+/rKzMhEIh84tf/MIcPny4+VVfX+/Xr5D03B6Dz+KqkPZzewz2799vMjMzzX333Wd27dplli9fbrKzs82///u/+/UrJD23x2DevHkmMzPTvPLKK2bPnj3mf/7nf8zgwYPNrbfe6tevkPTq6+vNtm3bzLZt24wk88wzz5ht27aZffv2GWOMmTt3rrnjjjua1z9zuenDDz9sqqurzcKFCzvG5abGGPPDH/7Q9O/f34RCITN27FizYcOG5p9dd911prCwsMX6r732mrn00ktNKBQyw4cPNytWrPCirU7Dzed/ySWXGElnvebNm5f4xlOI27+B/4tgYYfbY/Duu++aq6++2jiOYwYNGmQWLFhgGhoaEtx1anFzDE6fPm3mz59vBg8ebLp27Wry8vLMvffeaz7++OPEN54ifv/737f67/uZz72wsNBcd911Z21zxRVXmFAoZAYNGmRefPFF13V5bDoAALCG2TAAAMAaggUAALCGYAEAAKwhWAAAAGsIFgAAwBqCBQAAsIZgAQAArCFYAAAAawgWAADAGoIFAACwhmABAACsIVgAAABr/h9IZVPyKqbBBQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df2 = pd.DataFrame(np.random.rand(10, 4), columns=list('ABCD'))\n",
    "df2.plot.bar(stacked=True)  # 柱状图\n",
    "df2.plot.barh()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 饼图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([<Axes: ylabel='one'>, <Axes: ylabel='two'>], dtype=object)"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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63SiZd06tK5dh9a1LJ1jSXY7IgYNRFRhESILCxF1ahHMDofoWAGTZRmSJImOQX5gyZCumePjETd2LOLGjgVwdOm0bdiAjvLysHqeY05ORlRhISKLihBVWICI/v0hGWjfsNLSUmRnZ4uOQX5gyZChHFs6stcL1+7daN+2DR1l29FRVob27dvhqawUnDRIVitsmZmw5+bAlpMLe14uIvPzYevZU3Qy1axYsQIlJSW4/fbbRUchP7BkyNAksxn23FzYc3OBCRN+/ry3oQHtZWXoKNsO1+7dcFdXwVNZBXd1Nby1tZqZcjPFxcGWmQlbbg7sObmH/5qbC1tmpqE3n+zo6EBVVdUvXmGeOHEirr76atHxyA98u4zoGLLLBXdNDTyVlXBXVcNTXQV3ZRW89fXwtjTD19wCX3Pz4Y+2Nsjt7fC5XIDHc/SFJAmSxQLJaj38YbMd8fdWmOIcsCQnw5KUBEtKMsxJSbAkp8CSnARLUhLMKSlhuUX+sYsxExISkJ+fjyuuuALXXHMNF2PqDEuGSCGy1/vzjgX/LRWicMeSISIi1XDcSUREqmHJEBGRalgyRESkGpYMERGphiVDRESqYckQEZFqWDJERKQalgwREamGJUNERKphyRARkWpYMkREpBqWDBERqYYlQ0REqmHJEBGRalgyRESkGpYMERGphiVDRESqYckQEZFqWDJERKQalgwREamGJUNERKphyRARkWpYMkREpBqWDBERqYYlQ0REqmHJEBGRalgyRESkGpYMERGphiVDRESqYckQEZFqWDJERKQalgwREamGJUNERKphyRARkWpYMkREpBqWDBERqYYlQ0REqmHJEBGRalgyRESkGpYMERGphiVDRESqYckQEZFqWDJERKQalgwREamGJUNERKr5f6NZQaIVAl+cAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1000x1000 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df3 = pd.DataFrame(np.random.rand(4, 2), columns=['one', 'two'], index=list('ABCD'))\n",
    "df3['one'].plot.pie()\n",
    "df3.plot.pie(subplots=True, figsize=(10, 10), autopct='%0.2f%%')"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 散点图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: xlabel='A', ylabel='B'>"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjUAAAGwCAYAAABRgJRuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACBuUlEQVR4nO29e3QV5b3//94JIZCEJDsX1EDIBYKKARogAQJywFpaa6uUb20PtQUpeqoifnuU00r1VP3+tNhTOO1qSrWtiGIVW1sFe9dVAxQQEm4aUIEYApGIhFxJAklI5vfHZjazZ8/lmdmzr3m/1mItsvdcnrnsed7zubokSZJACCGEEBLlxIV7AIQQQgghTkBRQwghhJCYgKKGEEIIITEBRQ0hhBBCYgKKGkIIIYTEBBQ1hBBCCIkJKGoIIYQQEhMMCfcAQsnAwAAaGxsxYsQIuFyucA+HEEIIIQJIkoRz584hJycHcXH69phBJWoaGxuRm5sb7mEQQgghxAYNDQ0YPXq07veDStSMGDECgOekpKamhnk0hBBCCBGho6MDubm53nlcj0ElamSXU2pqKkUNIYQQEmWYhY4wUJgQQgghMQFFDSGEEEJiAooaQgghhMQEFDWEEEIIiQkoagghhBASE1DUEEIIISQmoKghhBBCSExAUUMIIYSQmICihhBCCCExAUUNIYQQQmKCQdUmgRBCYpG6pk6caOlGfmYyCrKSwz0cQsIGRQ0hhEQpbd29uH/TQWw/1uT9bE5RNioWlSAtKSGMIyMkPND9RAghUcr9mw5iZ+1Zn8921p7Fik0HwjQiQsILRQ0hhEQhdU2d2H6sCf2S5PN5vyRh+7EmHD/bFaaRERI+olbUPPXUU3C5XPjud78b7qEQQkjIOdHSbfh9fTNFDRl8RKWoqa6uxq9+9StMmjQp3EMhhJCwkJeRZPh9fiYDhsngI+pETWdnJ26//Xb85je/gdvtDvdwCCEkLBRmp2BOUTbiXS6fz+NdLswpymYWFBmURJ2oWb58OW6++WbceOONpsv29PSgo6PD5x8hhMQKFYtKMGtcls9ns8ZloWJRSZhGREh4iaqU7ldeeQX79+9HdXW10PKrV6/G448/HuRREUJIeEhLSsDGZWU4frYL9c1drFNDBj1RY6lpaGjA//2//xcvvfQShg0bJrTOqlWr0N7e7v3X0NAQ5FESQkjoKchKxryrR1LQkEGPS5JU+YARyubNm/GVr3wF8fHx3s/6+/vhcrkQFxeHnp4en++06OjoQFpaGtrb25GamhrsIRNCCCHEAUTn76hxP332s59FTU2Nz2dLly7FNddcg+9///umgoYQQgghsU3UiJoRI0aguLjY57Pk5GRkZmb6fU4IIYSQwUfUxNQQQgghhBgRNZYaLbZu3RruIRBCCCEkQqClhhBCCCExAUUNIYQQQmICihpCCCGExAQUNYQQQgiJCShqCCGEEBITUNQQQgghJCagqCGEEEJITEBRQwghhJCYgKKGEEIIITEBRQ0hhBBCYgKKGkIIIYTEBBQ1hBBCCIkJKGoIIYQQEhNQ1BBCCCEkJqCoIYQQQkhMQFFDCCGEkJiAooYQQgghMQFFDSGEEEJiAooaQgghhMQEFDWEEEIIiQkoagghhBASE1DUEEIIISQmoKghhBBCSExAUUMIIYSQmICihhBCCCExAUUNIYQQQmICihpCCCGExAQUNYQQQgiJCShqCCGEEBITUNQQQgghJCagqCGEEEJITEBRQwghhJCYgKKGEEIIITEBRQ0hhBBCYgKKGkIIIYTEBFEjap5++mlMmjQJqampSE1NxcyZM/G3v/0t3MMihBBCSIQQNaJm9OjReOqpp7Bv3z7s3bsXN9xwA2699VYcPnw43EMjhBBCSATgkiRJCvcg7JKRkYGf/OQnWLZsmeb3PT096Onp8f7d0dGB3NxctLe3IzU1NVTDJIQQQkgAdHR0IC0tzXT+jhpLjZL+/n688sor6OrqwsyZM3WXW716NdLS0rz/cnNzQzhKQgghhISSqLLU1NTUYObMmbhw4QJSUlLw8ssv44tf/KLu8rTUEEIIIdGPqKVmSAjHFDBXX301Dh48iPb2dvzhD3/AkiVLsG3bNkyYMEFz+cTERCQmJoZ4lIQQQggJB1FlqVFz4403YuzYsfjVr34ltLyo0iOEEBI71DV14kRLN/Izk1GQlRzu4RAbxKSlRs3AwICPe4kQQgiRaevuxf2bDmL7sSbvZ3OKslGxqARpSQlhHBkJFlETKLxq1Sps374d9fX1qKmpwapVq7B161bcfvvt4R4aIYSQCOT+TQexs/asz2c7a89ixaYDYRoRCTZRY6k5c+YMFi9ejE8++QRpaWmYNGkS/vGPf+Bzn/tcuIdGCCEkwqhr6vSx0Mj0SxK2H2vC8bNddEXFIFEjatavXx/uIRDiCPTvExJ8TrR0G35f30xRE4tEjaghJNqhf5+Q0JGXkWT4fX4mBU0sEjUxNYREO/TvExI6CrNTMKcoG/Eul8/n8S4X5hRl00oTo1DUEBICZP9+v6qCgtK/TwhxlopFJZg1Lsvns1njslCxqCRMIyLBhu4nQkIA/fuEhJ60pARsXFaG42e7UN/cxTi2QQBFDSEhgP59QsJHQRbFzGCB7idCQgD9+4QQEnwoaggJEfTvE0JIcKH7iZAQQf8+IYQEF4oaQkIM/fuEEBIcKGoIIVEHqzITQrSgqCGERA2sykwIMYKBwoSQqIFVmQkhRlDUEEKiAlZlJoSYQfcTISQqMKvKvLvuLLPKCBnkUNQQQqICs6rMq1475P0/42wuw6BqMpigqCGERAVyVeadtWf9XFBq5DibjcvKQjS6yINB1WQwwpgaQkjUoFWVWQvG2TComgxOaKkhhEQN6qrMp9svYNVrNbrLD9bu53JQtRql2BuM54XEPrTUEEKijoKsZMy7eiSmF2QYLvdp+4VBaa0xC6qub7Z+TuqaOlF55MygPJ8keqClhhAStZjF2Tx0yYqjF0sSq0G0ZkHV+Znix8rYHBJN0FJDCIlqROJs1LEkbd29WLy+Cjes3YalG6oxb81WLF5fhfbuvmAPNyTIYi/e5fL5PN7lwpyibEsCjrE5JJqgqCGERDVynE3lyrlYvXCi5jLqwGGnJupIdsloib1Z47JQsahEeBsseEiiDbqfCCGaRJtrpiAr2TRWpL65C9KlCVmNlSDaaHDJqIOq7VxHkdicaLg3yOCBooYQ4kM0TNh6iMSSiAgfs4nayNITabVxCrLsi1InY3MICQV0PxFCAFx2pdy1cW/IYyiccuOIxJIEOlEPJpeMk7E5hIQCWmoIGeRoWWbUBKu+STCsQhWLSrBi0wGfbSpjSfQypuJdLswal2V6fIPNJWN2PgmJJChqCBnkaLlS9HB6wg6GG0ckliSQiXqwuWSciM0hJFRQ1BAyiNGrPKuHkxN2sKveGsWSBDJRB2rpiVYCic0hJFQwpoaQQYyZK0UmGDEUwah6axW5MrHV43IiXZoQ4jy01BASI9hJwTZzpcgEY8KOZjdOtLpkoi1NnxCrUNQQEuUEEmxr5EqZMiYd994wLmgTYCy4caLFJRPNafpOQ2EX27gkSaNhSozS0dGBtLQ0tLe3IzU1NdzDIcQRFq+v0hUGIsG27d19fkGzoZrw7O6bE5M1Ar1HYgEKu+hGdP6mqCEkiqlr6sQNa7fpfl+5cq7wpB9OV4rovjkxWcfJeyTUOCleKeyiG9H5m+4nQqIYJ2umhNOVIrrvaKrkGylEcl0dPdHitHgNdqYdiRyiJvtp9erVKC0txYgRIzBy5EgsWLAAR44cCfewCAkr0Rxsa5VIquQbyY0s1UTiPWLWJd3pzuCRkGlHQkPUiJpt27Zh+fLl2L17N9566y309fVh/vz56OrizUgGL4OpjH0kTExmk3GwsSOmIvEeMRItwRCvkSLsokkMRytR4376+9//7vP3888/j5EjR2Lfvn2YM2dOmEZFSPgZLGXsI2Fi0puMl71QjeVBzBQL1B0TSfeImStoz/EWw/XtuMvCnWnHWLDQETWiRk17ezsAICMjQ3eZnp4e9PT0eP/u6OgI+rgICTXRWjPFKuGemIwm470nWrF0QzUAz2T14PzxaOnudexaBBpLFEn3iHnBR+PcFbviNZzCjrFgoSMqRc3AwAC++93vYtasWSguLtZdbvXq1Xj88cdDODJCwke01EyxS11TJ74+bTTO915E9YlW7+ehmphEqy9vP9bk6Bu5k0GukXCPmFncZhRmBUW8hkvYMUg5tESlqFm+fDkOHTqEHTt2GC63atUqPPDAA96/Ozo6kJubG+zhEUIcRMt0X5rvxpLyfFyXkxayCUG0+rKaQN/IrWYvRXoNHxGLWzCtKqEWdpGcfRaLRJ2oue+++/DnP/8Z27dvx+jRow2XTUxMRGJiYohGRggJBlqm+/0n2jA84WNsXJZjaVuBTPh6k7EZgb6Ri8YShTNuw+p5NRMtkeQuC5RIiAUbTESNqJEkCStWrMDrr7+OrVu3oqCgINxDIoQEGadM905N+FqTsSh238hFY4mcjttQCxUt4WL3vIqKlkhwlwVKuGPBBhtRI2qWL1+Ol19+GVu2bMGIESNw+vRpAEBaWhqGDx8e5tERQoKBU6Z7pyZ89WT8y8pa7D/RJmS5CeSN3MiyUdfUiT3HWxyL29ASKu6kBLQq0tZl4aJ1XnfUNuH29btRsWiK6T5jQbSIEEnZZ7FO1LRJcKlqLMhs2LABd9xxh9A22CaBkOjCiRL/wWwToNW7So2TpfiVlg13UoKf+NBjw9JSzLt6pNA+tNoJqIl3uVAyJh17FQHbWjBt2ZdYcKeFi5hrkxAl2osQYgGzWIzC7BSUj83Ero+a/b4rH5spNDEEM1BTbbnJTB6KNf84GrQ3cqVlQxYfIohaifTcfWrkNHYzmLbsy2CxTIWTqBE1hJDYwUosht77jOh7jtOBmlpCTDlZORHgaib2RMWHlbiNuqZO/Om9RstjNcLJtGUrwciRngFGggdFDSEk5IjGuNQ1deKdOn8rDQC8U9csNFk6FahpJsTUE6nodpXrabmUtMSeaM2c6YUZplYireMSpTTfLRRTFIg1zIoAZuVeQlFDSIQSq2+bVjKanHIdBRqoWdfUifs3HcD7jb5VyXfWnsXdv92HhPg4yxOpXkCuuo+UltgTqZkTB2BIXJzpZK4lMM2QBaFoNlggQdJWgrxZuZdQ1BASYcT626YVoeKU68hu3RMzK0a/JOGdumbEqfIYjCZSWaz+8u1a7D/Z5vNdq0ZjTC2xJ1IzZwAwdf2IurHU2U+yoFGe1xUv78f7jR0YUKwXaNqyFQEcKZV7Y/VlJFqgqCEkwoj1t00rQsXpGh9WAzVFrRgDKl2hNZEG4uYB/K1SolYSI2uWmcD8z88V4ZbJo1CQlWwoCAuykvHSnTM0rWEPzh+PyiNnbE3yVgRwuCv3xvrLSLQQF+4BEEIuI79tqt++lZNktCMLlXhVmYZ4lwtzirL9Jp6KRSWYNS7L57NQ1PjQuxZWqG++fL3suHmU/OgvH+C9hjbv37KVZOO3Sw3XM7JmmQlMWdAAHuEy7+qRusJAHk/lyrnYsLQUW5bPAgDcum4nlm6oxrw1W7F4fZWfe80IKwI43JV7jV5GSOigqCEkghB524xE6po6UXnkjLDosiJU1JNl5cq52LisLOhvvyLBuGYP0HgXUHnkDLYfPROwQDp2phO3rNvpJwzmjB9pSSQqsSIwRa+xLH7Wvnk04EneyvisimUnGQwvI9EC3U+EhBAzf3u43zatEuwy+UpCXeNDJBh3Sp7bsF7L4ueqLe0z3gUkJw5Bx4WLusvsqG3yc0UGEghttq6da+xkfIuVYwtX5d5wu77IZShqCAkBohNDpPSJEQ12DDT+J5KLkeldizgXMCEnFRWLpqC+uQtLN1gTLkbMGpeNr5WOxn0v61szBiT/AOBAGkCarWvnGjs1ycv34eO3Xuddz+jYwtUIM9peRmIZihoSVURrZoGViSGcfWKsvJVHSrZJsKhr6sTXp43G+d6LqFZYY2aPu3w+nKp0/tTCiZhemOltHCnC+6faNQN27Z5zrXXtXuNAJ/lAg25DLZYj5WWEUNSQKCGaMwusTgyBvm0GIvysiK9INLk7IXq17rXSfDeWlOfjupw0zTgOs15JZnx67oJ334+98b7QOqter8HsomzNwn9OYfcaBzrJR2MGIJtWRgYUNSQqiMaHnIzdicHq22agws+q+Iokk7uTolfrXtt/og3DEz7GxmU5fstXLCrBsheqhXoh6fHTt47hp28d8xTfOy+WHdRx4SKWbKhC6rCEoIn9QK6x3Uk+Wi2A4XJ9EV+Y/UQinmjPLAjV5B9oSqnVzKtwZpuocSqd1uq91tbdixWbDvgImtJ8N2YWZiJeVZBPhNbuPr+aN0YcbGjDjlpfAeBkGnEg19hu1lq0ZgDKmKW+K7GaNUjMoaghEU+0P+RCMfk7IfzsiK9Q1ZAxevg7KXqt3mt6Vh2XC0gdHhq3qFHhPyd4YsF1SB3ua9RPHT4ETy4oFlrfyiQPRJYFMFi0dfdi8foq3LB2m+0aPkQbup9IxBMNDzmzmIZg+9udiG+xEwcRbJO7kVupuasHJ1q68Wn7BcNtWIntsXKvGblJdn2k3YQzlDgV0/TI5sPoOO+bYt7e3YeHNx+y7PoVif0ZDEG30exOj3QoakjEE8kPOdFYjmBP/k4JP7viK1jZJtoP/ybMXVOp2SdJCyui18q9JtopO1w4Ifb1hJvcV+q9j9swaXS66XasxjzFctBttMYMRQsUNSQqiNSHnNU3rmBN/k4Jv0gKdtR/+Gs3flRjV/SK3msixfn0eHFZGX6z/bh/DRwAcXEuXBQMrEkfnoBzFy4GTeybCbcfvF6DP6+43nQ7Vn8nkXQfOk0kZg3GEhQ1JCqIxIdcpL1xBSL81G6BSCiKF6glxK7oFb3XCrNTUJrvRnW9ftZTHKDZtfr6omxMGpXud71mF2XjyQXFeOD3B31q4+jRdr4PpXlun2WdEPvy/WAW7HzoVAdeqTrprbGjty27v5NIuA+dJhrc6dEMRQ2JKiLpIRdpb1x2hF8k1/+xYwlZvXAirkwb5ojoFbnXlpTnG4qaCTmpONTY4f1bKTiMrter95R7P/+0/QIeeq1Gdx/33jAO+ZnJjoh9rfshJTEenT39uuvIY9O7b4L5O4nGYpyR7E6PBShqCLFJpL5xWRF+kRywaKew3QwDi4HTtHX34oVd9YbLVHxjCgDj8v5610v+3KzC8JA4l2NiX+t+6DIQNEr07ptg/E6sinGnxI9T24lUd3osQFFDiE2i/Y0rHO4zq5OC1sNfC7vn/LKbxYV+SbI0Wd2/6SD2n2gTGk8g59FM3H1rfZVfRpidSVfvfhAtm6N33zj1O1HeO49uOSwkxp2yRDpt0YxEd3qs4JKcal4SBXR0dCAtLQ3t7e1ITU0N93BIDNDe3ec36UaK+8aMyiNnDJsxblhainlXj3RkX4FMCnVNnfjLe59g7VtHdZcpzXPjkS9NQEt3r223m3pcRgKhrqkTN6zdZjieZ5eUOnYPaN1nSuIv1cVRBlBPy3NjaXk+JoxKE5owze4HMzeUjNZ9E8jvxOhaaVG5cq73eBevr9IVU1YskYt+vRvv1Pmn6c8szMSm/5ghvB1iH9H5m5YaQgIgmt+4QuE+k9+uf/l2LfafbPP5zszNZWUyO9/Xj1vX7fT+bTZharlZZHZopIyrt2cWJ3LvDeMcFbXyfbb9aBMWP1fl971WRtjeE63eSsciAsLsfhARNID2fRPI78ToWmkhx+g4ZYmsa+rUFDQA8E5dM1OwIwxWFCbEAaxWTY0EglnpWF0xtfpEq+WKv1Yms/cVwbiAcasAvQrEMgMaAkG9PacFoWi5fLtNM0VaJxRmp6A4x74FW+S+sfo7MbtWWsjn3qlK5HuOtxh+v1tH8JDwQFFDyCAmWG0OrAgSrclFdDKLu6THBlSfGwkmO6ni6u05JQitlsu3WxtHtHXCk1+ZaGv7gPOBrnVNnfjTe43Cy6vPvdukTYW48DS+B220+CJBhO4nQgYxzV09WDo7H3fNKcDFAWuBsoB24K+e2V8PrclFVHhMyEnFoVMdut9rpQsHUjRPuT0nMlisZp/ZyQjTG78Wk3PTMacoGztqm4Qba/7n54pwy+RRjlkprcbQyKjP/f++dUx3WSvCc3pBpvH3hcbfk9BCUUPIIMQocDfQ9a1aQs6d97dKmAmPpxZOxPTCTEiSZBiwqyWYAhEGyu1ZiROxIv7MYj5EM8LMxq+H1e07KWgAMSufHOz7+K3Xob65C/EuT1xRS3cv0pISTIX1yvnjhcdTmJ2C8rGZmv28yseGroQAEYOihpBBSKD1abTW31HbhNvX78b3Pn+NpbH84PUa/Pl+31L7ZmnA/142xvuZnXRhqxO30faMasQEIv70rCqymNpUdRKrDIry2UVLrMkp1MEuXSBq5ZOtMhIkPLql3u/8fn3aaMP1m7t7LY3r6dun6mZvkciCooaQQUagWSG6TQ4lT9n8xc9VYYiF/kWHGjs09ynq3rHjBlJO3Cte3o/DjR2GkRN240WMxONjt0wwXNfMqjK9IMPyeJSZQWb1bJRiLVTF4syEntrVJadsK9lZexbdvRe1VvdiNZA7mrMcBxsUNYQMMgItWy/iXhIVNEb7FJ1IAplwCrKS8dKdMzTfwlfOH49mwbo3WpiJR9elwFYtC0jJmHRvALXevu240TKShmLx+irL9WJCNambZa4oBY3R+d17ohWl+W7sP9HmqHUpktq0EG0oaggZZASajhxIoK2VfSqtCSJFAO1OOIFO2HpWDxHxqGUBSU6Mx94Trd5CeEaiQ9SNFucCZo/Lxto3jwbkdgzWpG4WHKwlRszO75LyfAxP+HhQtyKIxt5YgUJRQ8ggI9Cy9YFm4CjR2me4+vpYnbDNxikiHtOSEvDzRZ/BXRv3ehtjdlzwdZ0YiQ7R+JoJOal4cP54nwKFMlbcjlrBzk6ce7PgYC0xYnZ+r8tJw8ZlOYPSZRTJjWqDDUUNCRuR9BYRyFgi6ThECTRGwk4GThw8k7CysJ3WPkWDmLUe3KX5biwpz8d1OWmQJCmo18VsnIXZKXCrjlfJo1sOo2JRiWEPKUBMdJjF11QsmmJabE7P7fhuQysefv2QT7fxmYWZcLngkxFkd9IUyVS6eVKO33ZFxXkkuIzsPCMCea5EcqPaYENRQ0JOJL1FBDKWSDoOqwTqclEH2r7f2OFTAE+rF9HsS+empbtXd59Wgpi1HtzV9a1ei4cSO9fFaFIRGackSbqCBvBkiy17odrbysAMo1gnswlekiScbj9vuH21C9DIJaTVNsDupGnmRlrz5lGsefOo5jUUEefhfOmw84wI9LkSjka1kURUVRTevn07vvzlLyMnJwculwubN28O95CIDYzeIqJpLME6DtGS+U6gVbbeyv7lQNvZRdk+n88al42tK+dh47fL8J+fK8KLy8qwcVkZ0pISDEvli5a2t1o+38p1EanyazbOw43tpssMSBAWNIB5rJNWdeiyggxcHBjADWu3YdVrhzTX06uCfP+mg9hRK26JE61arEY0RkvrGsriunLlXGxYWorKlXO995nVas3BwM4zItDnilPtIaKVqLLUdHV1YfLkyfj2t7+NhQsXhns4xAaR9BYRyFiCcRzBtPzova0qP3cnJdjav5bVx52UYKsrs2gQs9UCf1aui4jp3mycL+yqx4//zyRLYzSiNN9tOm5JIyn9w9Md6NAobqhEywVotSq0ErPsOTWiMVpG11DLxXTvS/v9CuZtP9aEe17ah5fvcraztlPFFZ14rlhJBIhG17kZUSVqbrrpJtx0003hHgYJgEDTiSNlLME4Drt+cKMHk55QemJBMR7ZfMjnc3dSgt9brN3MGL36IWbbEo2TsGti1rsu8jmMd8FwUtl+1GMdys9MxrQ8t66lpbq+FafazntaDhxr8utNZZUl5fmmy2jdP0bur9ULJ2JGoXZFXDv9sWR++XYtpuS6LQlxKzFaIr+tdxtaNSsAA544IKdenpwurujEc0XkNxTNrnMzokrUWKWnpwc9PT3evzs69HvEkNDgdHfjQAhkLMHo0mz1DU3kwaQnlG5dtwMd532zbLQmQDuWp0DfNkXiJOyKBCtxI1osfq7K+/9rrxxhuOy31lehfGwmphdmasagyPVoRFxQ1+WkGX5vx7JyZdowXatdIHEJ+0+2WY6tUVr7dtc1G2Zyify2Vr76nuH3e+qaHRE1ThdXdOq5YvYbiuVA4pgWNatXr8bjjz8e7mEQBYGmE0fKWJw+DjtvaGYPJiNxYfQGL7p/PQJ92xQJYrY66epdFyvdxNV8ePqc6TJ76lowa1wW3rhvFn7weo1P882SMelYWp6PC339PplFalKHDTHtKXW6/YLl8WcmDQVgv4GkHoG4YGVr399qTtv+bdU1deLYmU7DZawUIjBy3dotrqh3HE49V4x+Q5EUAhAMoipQ2CqrVq1Ce3u7919DQ0O4h0SgHdAYrqJYgYzFyeOw+oamFyirfDAF4kIw278RVn36WkHJdU2dmoJGDv5ccqkwnSjydVHuz2qwsRqRteTr0dbdhwfnX40Xl5Wh4hslKM33uK6WbzpgKGgAT90a9flRB8Ha6QG15s2jAAITdkYEEpAayG9L5L6fIdBZ2yzQWLS4otXjcPK5ohWUH+uBxDFtqUlMTERiYmK4h0FURFIflUDG4uRxWH1DE3kwOVH5147lSeRYtGqf6MX6KF1qZhNwaZ4bNxVfiaTEIRjlHo6LA5Ju4HLxqFThYwoUpdvKnZRgGryrZrfKXSIqRFzQF19yjJCohWZhSQ5eO9AotCwQmCs5kN+W2X1fkpsmtC0zS6hocUWrxxHs52MkhQAEg5i21JDIxii1N5rG4tRxmL2hKa0MIg8mWVzEu1w+38W7XHAnJWh87plwRfZv91ieWFCMxeurcOu6XX4WCjnWR28iMbOsPP3NKRg+dAj+318+wEOv1eBb66uwYUc9MpKGak5Q75tYSIJFa3cf+i0ah1a9VuO1ElixMF1nItwONIinlIsKGr0UcTvIvy1JkoTvPfm+15rcUhLj8R9zCk23JWIJzUge6vd7ATyTqvr47TwjgvV8NHouOHXdwklUWWo6OztRW1vr/fv48eM4ePAgMjIyMGbMmDCOjJDA0XtDk83gautF+dhM7KlrMbTs6AUMPrmgGA+rLCKzxmkXx9Pbv1nbgsdvvQ4AfLa1eH2Vbu0TvVgfeSLZc7zF8Pytq6zFB42+cS47a8/qFriTe24aWTMiiZ21Z3HnxmrMLsoyXO6phRNxRdow5GcmQ5Ik3LB2m+6yJblup4eJa68agZXzxzuyLbtZOnrZVJ09/bjnpcv1XvS2JWIJfXRLvabFLS0pIeiu9EBTsUPVdT0cuCQpwOYtIWTr1q2YN2+e3+dLlizB888/b7p+R0cH0tLS0N7ejtTU0JmeCQkEOT1aLV7KCjKQEB8n9MDXM2WLmLj19j9rXJZp2wLleOqaOg0nWDNWLyzWLSDnJDMLM3Ghrx8HGtqCvi81E3NSUROgBaly5Vyfa2l2/bS+t8Kcomx8598KsPpvH/oEQs8pysaD88ejJYBO56L3nh7Hz3ZhxaZLFa81Dk9vW2b36sZvl2Lxc/pxXepr4BROp2JHQgiAKKLzd1RZaubOnYso0mCEBIxRpsI7dc2oXDkXAEwfTHr9b8z64gTatkC2Ltw7bxw+tZGho2S0O8mxRppaxLmAqXlubPqPGag8csbbJTsUKCfXV6pO4iEbgb/KlgiVR8547wezt3I7fbwA4D8/V4RbJo9CQVYyvvGb3T6CBrgUs2MgcM0sDU5k6UiS5Dcu0W0Vj0r1E0PyOTZzHwar3pbTqdiR0BfLaaJK1BAy2BAxgwfidzebXETTs40moOr6VkcEwqnW87Yn4ImjUlFjMLkBHndUdX0rjp/tCnmwoVJklJk0p9RjemEG+voHfCwMspAwCjxVuz3jXTC0QsjIgqauqVO30J2SnbVncc9L+zAkTsy66EQhOtEMQHlbZunt8nVq7urR/F4mGMG2sZ6K7RQMFCYkgglWpoJoX5xgtS2wgwTPBGxW1ExN6rAh+M6/jRVefsXL+y2njAfCxFGp3n5FssgszXP7BXLqsaAkBy8uK8OQuDhUqeKO/nWsCbc/u9s74eVlJKG+uUszSFYOTFUXZVTjgm8g7J7j5oIG8Ey+uz5qxg7VxKzX18jOva8OZhed4ORtaVlC4gAU56T69JUKR7BtrKdiOwUtNYREMHKGhTqANg6ertd2H56iZmzRVPNA0scTh8Sh56J5jWC5tojVrKWOCxeROkw83sDK9uNc0IzVsELNqQ6829CGtW8e9WtbIVIkcfOBRmzWyUySABxq7MC8NVv9tqdnIXl+V73h/iQAFwcG0N7dd2ldMfElo77SepYGK2UOtCwsIucvzgVMyPHEZ+hZQgYAzVpCoQ62jfVUbKegpYaQCOb+TQcdz7AQSVdVIlIMzJtGa21+AwAhQVOad7mho9mkq0W/JKEkN11oWb3RPPPNKZij6kY+Nc+Z7KH/+sO7fiKz4/xFlOa7sWFpqSXLjR7qCV7LQlLX1CnUtmFPXYt33ek23WVqtCwNevfeg/OLfCwyVvteyQxIwKFTHtF3/yvGXbDV4zPqEB4MYj0V2yloqSEkQjHq59Pa3YeW7l7hB6gydsZqrIJoMbCKRSW4fb1/wKgTJAzxvH+JTrpq8jOTceFif0BjSEyI1zwP6nR3Oxz91L+svxyPlJ+ZjEe+NAEPv15jWn3YCloWElE3onLdwuwUzNTpb6XEzKqlZWlQ33sZSQlY++Yx3Lpul3cZo8aiWvzkq5Pwwq56TxCw4nMzC92n7Rd8zpXyNzXv6pHC+w+EWE7FdgqKGkIiFCcCJbXM8hNNCrLpmbHNMiXSkhLw838vCShtW49dHzVjU9VJi44OT0HBWeOyIUkSPvjEvFeTEfJ5UZ+HB+cXOdY3SYsVL+/3ETN5mUk40excDJPyPrLqRpTXfeabU/0mW7X7Z/a4bPT1D6DquG9tJaULSA/5nGt1f99nUeReHBjQFIey4IqDtrVOzkgrH5sJSYKPiAtVh+tIqsYeqVDUEBKhOOFD95jlfSfcmlMdGBLnwsCA5PPwdqKpqOhbu7y/a68aIWx9EOlvpM5ykgsK7rdQOVeL8rGZmuelrbsXD78e3No5agtCg8NB2cr7SC+OxWxdvclW/Xd7d5+f+FG6gErz3Hh2SaluUUct8Wg9pMlYGk/ISTW8J7UyvULd4ToWU7GdgqKGkAhFb4KJc3neekW6FetZEC4OSEgdNgQdFy5nulgxYxulguuFfowYNgTnFPubkpeOLxRf6YhLRVnnRestNtA+WHrz+/2bDga93YLaaqBnUYh3uZA6fIhwB3Y9ESuSNq+3rnqyVf+tFD8rXt6Pw40dPqKk+kQr5q6pxNaV8yyneJshj9ksBqjiG1MAePptiTYKZVp15EBRQ0gEU7GoBPe8tM/n7XBAAvr6ldkn2phNAh0XLuLFZWXepo8iD2ORqsF6NUvOXdpfe3cfXthVj+r6VlTXB2ZBkVEKMq0CnYXZKSjNd2PfiVZb2Urv1DX7TVhGojEUqC0Ks8Zl4ZbJV2HlH94TWl9PxKqtLpnJQ7HmH76ZWVPy0vG10tG2J3FJknTFbGt3H+7cWI1X7y73+dyqMFW7v+TjTUtKEMqqspMirazbFEgbA2IfihpCIpi0pAQMiYvzeyuvOt5iau4WmQROtZ7Hv5eJ903TyjLZcazJOxYzIXVxQMLv936M/SfbhPepx+qFE3HlpR5HRj2qnlhwHR7ZfFhTQImmTQP+MUyhqM1jhGxR8ATQDsXaN48KCxoRlFYWWeQcPtXuJ0i14kkCLeooF0FUp3inJMajs0c/4Ft5T0iShD3HW+ACML3Q130oEnBrx7qXkTTUUp804jwUNYREMIFUEZWtE0bWkIdeq8Ffa04LPXSN6nhsP9aE9z5uM50I4l1wzLoxQzVR6dXeuXXdTr+CcnHwpGP/Zsk03LVxr5DFSB3DFKhLK1Ae3XIYFYtKdANozTCKA1GLEvnvF3bV+wlS5XZEexOJnDu1iKxr6jQUNIDnnnAnJZiOQSTg1kp8kWzlWfvmUUfbGBDrsE4NIWFGXQVVSaBVRJ9dXAq3iVjZoag6a4TZWH7weo1uvRq5loZZzxwRtOpyGNXeae3u8/t8AJ74jdueeUcoe6Y4J1V30gu0foxd5MlS79jN0KpLpFVpetJj//D+XX2iVbe+0StVJ3HXC3t1J3UlhdkpKDbJeFKLSLP7T75Gd76wV7hqsVxFWe/FQKtOTvnYTMy8VAhSxlM7Z7yl+k8kONBSQ0iYEHmrtZIBpWXyT0tKwNaV83DnC54JSQu5Yuq8NVsNTeVmYzl0qTJuX/+AX9zK9MIMoZ45IqjdBG3dvaaF0/Q4dsa/PowWP/rKRAD+57hiUQmWvVBtq3ZOoMiT5Xde3BfQdpQWkTtf2Osn8pTB5EboNeFUWxXl+14vpkZOw1cLDbP7b9VN1+C2Z3ZpXgsRy6be70fPoqP+rPLIGcPxBavJZSQRCbFEFDWEhAmRVgUipeLNxFFaUgJevaccm6pOmmZzBGoqf3hzDT5o9K0HEwdgSFycdyxzirItu6CeWjgRVyjiZ5QEMwNJzjQbk5nkFysh1ytxStBYie9RUttkLMwe+/K1eOxPH+h+n5/puYfu2rg3qOJMntS17nslchq+GqNswKl5bqz++4c4bHIf1Dd3QZIkn4lX5OVCK4Va/dlgbmMg6nYMBRQ1hIQBK7EyZkGNon2cRMrZG73RigTGalUTlmNu5G3KZnorqAM95TfCeJfLcFtx8Lxtd5y/aNk9A3gyjFZ+frzmORbpTG1EvMuFKWPSce8N4/zquvzoL+/j2Bkxd4XRYZXmu7H5wCem27h/00HLReyskp+p381d5sVlZbhe1YpCidZvIW14gnAW3S/frvWxWM4pysbFgQHsVtVVsiPurfSqijVEn0GhgKKGDAoiwSyqxEq1YCMTuJk4+texJu8kcfmh22Qa26JlKjd7Ey0amWLozpG32dLda7xzBeoJQeuN0IgJOal4+vapeHjzIUtCKmloPLp7+3HoVAdu+cVO4fWsoEwxlpHf/jOShuLWdcb7dcG88JzIZL+77mxQU9OV13BT1UnDZS+a5Nurfwu/fLtWKJPOBSA5Md5PuP3rWJPmObRbd6ZiUQnu3Fjtc95jvY1BIMkMwYCBwiSm0Qp8XLy+Cu02zPxGAb1Wx7Tu7VrDZbRM1VpBjWbi6Fvrq3yOt2JRCVKHm5uD5bdq5fFeDoz1X96dlIA1t0023SZgLWtIOSFsO3IGt/5ih6UJuOIbU5CbmeRtPLh64USh9bp7A+sTZUZpvtvQND85Nx1FI1MMtzFupFMThbVA53iXC6X5buFzOWtcFp5YUIzF66tM3Z+iLpqCrGTkZSRpBi5rIQHo7On3K2RotqaVWjVt3b1YsemAj6ApzTO+zrFAoMkMTkNLjQNEmhWAXMYJs6jT/uL7Nx3EAZ23y3iXC1Py0r0PArP7SUQgKI+3uatHKG7je6++62emr1hUomn+L81349nFpcJFzayW4m9o7cLcNVWW4k20TP6yFeSP+z7G/hOtut24Q8H+E22696B8v5kFMf96cSke3XJY+DxqUTQyxXKXbaWF6W81p/1jXABcNyoVD8y/2qfpp1EcjR0XTSjqBFmJg9F61uw/qX+dY4VIiyWipSYAnLQCEOcxSvO1kmJpJIycGpNMcmI8qutbhe8nkbRi5fGKTgRqM718vLL5v3LlXGxYWorKlXPx6t3lXnGnlQKrZX6vWFSCkjHppuPYWXsWC9btshxAq7VP+fe6N8yCBjC+B80CaZUp7Vrn2wqP33KdcGr6NVeOQOXKudi4rMzweg/A019sw456ZCQNFUo5t+OiCXedICVmz5p/hbDytFMWZVH07h+t0guhgKImAJyc7IjzOGEWdUoYiY6pU5U+K3I/iU5s9c1dwhOBetJXH69s/q9v7vI5B2lJCXjslgl4auFErF440W8SVC63/IZxpuPolyTTOAuZF5eVeYWW1j7NxEI4eP9Uu8/fogLgwflFqDxyBi3dvdi4rAwbv11qa//PbKsDIHYPfXj6clabPHHK+y/Nd/vVJpLvXbN7/qmFEzWvlxl6k2kcPDVrnhJ0jxkh6jqx6gYOBuF8yRZ9mQkFttxPzc3NyMz0FB9qaGjAb37zG5w/fx633HILrr/+ekcHGKlEWnAU8ccJs6iVgF4nxmQkJvT2I1tP/lrzCe59ab/utmVXgJHrJ84Fw95I9c1duhVbn1hQjEdUAbmB1L2xQnFOqmHWTLj7NOnxzPaPcPPkHO/fZvfbD790LbYeOYtb1+3yfiafYzup8sp7a+OyMtO0/0ON7Xh0y2Gf/UzLcxvWhrnz+nzDMUxXFbKzgpY7dPal8yFSEyk+Dug3MNsNUSs1Hay6gYNBODOQRCo0hwpLlpqamhrk5+dj5MiRuOaaa3Dw4EGUlpbipz/9KX79619j3rx52Lx5c5CGGllEWnAU8ccJs6jT/mLdt0uTZ6fI/fRKVYPud8rjNXorn5rnNtxHfqZ2nZEdx5rwxZ9vx45asUqugLMVeeXieHqEu0+THjWnOnDb07u8b9Nm95scw6JEPscVi0pQPta6QFDeW2bxNRt31fvHjZikgvdLCJp7QssdKlt99Kpb+4xtAEgdpv9uL2phseoGdtpF5LRF2S5mFZpDgSVR873vfQ8TJ07E9u3bMXfuXHzpS1/CzTffjPb2drS2tuI73/kOnnrqqWCNNaKItOAook2gZtFg+Iu1xiQiJowws0Ss/Px47//VE4HSbfPq3eWGxytdekhqtR3o7On3s/KYPVQDjQmJc3kmzEm56YbLRVL8hZp9J1q9ws/ofivNdxu2KWjp7sXLd81A5cq5ePBzRcL7V1ojjPY/Lc/TR0zr2huRn6kd++Oke0JvMq1YVIIJJu0YVn9lIkrz9X9/oiEFovfyipf3O+4i4kv2ZSy5n6qrq/H2229j0qRJmDx5Mn7961/j3nvvRVycRxutWLECM2bMCMpAI43BXGgpmnDCLGpW/M5q9pvWmCRJwg1rt1k7OAVmD7XmLv/aMFpVUgHj493fYK9Am56bTnkuDjde7gAtymyd6rNq9H6vIrVelFhZPt7lwrU5IzQLEipRFyfUOv/X5ozATcVXGZ4b+Rx3nO/FPw5/KjhK/9owWvsvK8hAm0l9IbXrMs4Fr6AI9Hco8hvTWkaChGFD4g23PWFUGl69uxzbjzZh8XNVft+LhhTIx7j96Bksfq5adzl19WsnXER8yb6MJVHT0tKCK6+8EgCQkpKC5ORkuN2XFa7b7ca5c+f0Vo85RNrXk8hAbwIXQe+BLAfm2U31Vo4p0L4xdh9qov1uJEnC/oZW264is4dqQZZnH/fOG4chcS5cHJAQ74Lh5GBWfVaN1u/ViqApy8/AsIR4v+u9cv54NLR04/ld9T5p8HJArzL+xYgVm/bjpWUzvOf/3YZWrHz1XRw704VDpzpw6NT7hutnJA3FV5/W7n1kxOn2Cz4Tttb1f3TLYRw5bfxsn5rn2xF+QPJUmJ63ZiuKR6XiR1+ZiEmj0y39DkXKKRgtY1Y+QfkCapYWLxo/N2f8SN12DgOSvbg5M/iSfRmXJIkXOIiLi8Onn36K7GzPg2TEiBF47733UFBQAAD49NNPkZOTg/7+4BausktHRwfS0tLQ3t6O1FRjk6QVIiE4ioQeufaG1kNE761L742zrqnT0FJTuXKu6b0lOp66pk4c/qQDG1VWES1BpjVhuJMS0HG+T6jjttyX59W7y3WXMZqUlr1Q7VdTxuwcm3Hb07uwz2Ja9xxF8Ome4y1wwb91A+D7LNAKqDZC7jO1cVkZ2rp7MW/NVqFU9jgA468cgca288LNJ7XQE+Rm96YLwPVF2V4htOLl/Xi/sUPz/Fqt7yRyT+stMyUv3dCypayvJHKcWr9Bvd9ze3efn4AuHpVqaLVbvXAirtTpbyaC1j7D1X8pGIjO35ZFzU033YTExEQAwJ/+9CfccMMNSE72XICenh78/e9/H3Sihgw+rD4ARd447YgkJWYPNbMWA1r7+sZvdmv2OEofnoC28+JxAEYPV63jjgOQMmyI5iQdyIPa7LppUZrvxtrbJuORzYcNr596gtM6LhF+8tVJ+P3eBktuOCfQu9cqj5zB0g36FrOUxHjs/P5nkZaUYHp+4+DJTnrslglC7iSz31ggbtsNS0sx7+qRPp9p3ouX3GgVi6YYtuvQui/tupgDucdj9SU7KKJm6dKlQstt2LBBdJMhhaKGOIXZg179wBQRLE69aek91EQnWVmQmU0qLy4rw4///qHnrdzkKaI3YVoRGUqrj90q3mbXLS8zCQ0t3T7HE+9yIXX4ELR392lajH6+6DN+E1xpvjuoomT5vLF4YVc9Onucf4FUC/JtR85gicE5U65jdn610LvHRX5jACzvz7t9DcuL1m9Qa6wrNh2w9QIi+htUb4tV68Xnb0sxNZEqVggJNVZiWERrGjlV60ErfshKnRY5dmDPceMu1Kdaz+OlZTMMJwEZvbgBK6nWA5KnQeNtT+/yiV1RuxGMMLtuJ5r9x9MvSZpuIPmY7tq4F/tPtPl8F+yO1+sqPwratnfXNfvcfyJuOvmesZNlphcoK/IbM3snL81zY//JNuE4E+VvUMuNtrP2rF/DShmR2BituC4t5G2929CGtW8ejVmXUjBgRWFCbGAl1dtquqXdWg9GtS+siIfLgsw4KFiCb3r46oXFuKM8z3CdN9495TM+O5OgWjBU17di7ppKv7TYuqZObKo6gU1VJ4Nap0MzzdnEclWa53akPo8o7qQEzUakWqx6rcYn3ThDYPKU7xmR2jBq9NL+C7NTMFOnMN81V47w2Z/e7/DZJaW2UsklScIhjbigfkkytcAZpU+ryymYVT1+eHMNq9ZbhA0tCbGJaPZbsNMtRfz7IuJB/QZrVojttf0f44vFV0GC5FdlVo+fvnUMP33rmHd88qS0o7bJVAjIaFkOWrv7cOcL1Xj1nnK0dffi3pf2+8UCTctzo8NCHFAwkM+x6Bu7Ezx+ywQs+MxoW/uTJ1SjasVqEW/32LSyi/R034enz2Hemq2YU5SNJxcU42FVJWtl00071s9AijWK/J5la2pdk3HTUq3AYrVFiK4pXyzF1EQ7jKkhwUDkgRloELARotv+6tO7DLtTa5m1F/16N96p03ZDyfsAYDkgVjm+k83d+OLPtzsSH1K5cq6wwHKCwqxk1FmwAqnP8e+qT+L7f9RvS+AEyviu42e7sLuuGRd6+/HXmk983HhGvLF8Flb/7UO/e+HaK0fgx1+dhEmj0/3Wea+hDT94vQaHGo3r9MioY1xE4q2U95GTAbJm+zZya1n9Pev9fq+9aoThufvFohL8fu/Hg8Y1JTp/0/1ESIAYuYtkl9DK+eODUlFVpDy6UXfq0jw31i0q0W0C+cw3p2KaTrVjeR9mDRiN1j1+tguPbD6E7l5nAl531zWHtMdT6nDxyeOZb07xO8dfLx0Dt84E5E5K8Lr1AkG2HLR19+LRLYex6rUaPP7n91F9ohWl+W784hslpm6Q5u5ebPoPT7Xi//7StSgamQIA+OD0Odzyi52aVXEn5abjz/dfj8qVc/GfJhWOi3NS/X4/ItYStdXCqRL9wXJraaFXbflJk9YfL2i0rKBriu4nQoKCnkvojftmobmr1zFTsUi8zqNb/B9+IvVjgMvdtO1mmIwckYgz5/QbC/7p3UZHRUjoolSAiaNScbChTXj5tW8eRWJCvN+1f/obU/Dvz+7xW/6HN09AfXMXZhRm6TaNNEJZ0RfQbni4/0Qbhid8jJsnXmm4rdV/fR9Tct0oyErGtiNnUdfka50yqopbkJWMz2hYcpTcN8+3Y3tdUydqPm4zXEeJ1cayIhi5l51s4Gi0Lb2Ceno1eNhQOQpFzbp16/CTn/wEp0+fxuTJk1FRUYGysuB2ICXi0L/rQa9jLgBHO+aaxcrEu1yaokHOJBJ5+AXSN8lI0ADA/7511Pa2lcj1T8pM4oCcZHZRFmpMWiAoOXam0ysOp+W5sbQ8HxNGpeGel7U7q//nq+96/z+zMBOpOnV7AI+YS09K8MnSUlb0NeukXZhtfA8c+7QLKzYdwGO3TBDK5AN8nwWN7RcMt996KdZJLx7KDJE4FifamajXC6RSuRqtbekJq6+VjhZqmTEYiSpR87vf/Q4PPPAAnnnmGUyfPh0/+9nP8PnPfx5HjhzByJEjzTdAgoZoMarBgGgKtxOYlUc3cwspS/Nb3UecC0gdpl+ErzgnVTieIlBmK+41o6BWJ5lZmImnt9bZWnfviVZLlpeq4y1IGabfw0iCJ1j6xWVl+PHfPvRLRTbrpJ2RbPwbleDpT1V1vMVwufrmLs1KyrK7Sg/Zwnb/poOWBI1IG4BAn01OCher6AkrswDjwdTrSU1UxdT87//+L+666y4sXboUEyZMwDPPPIOkpCQ899xz4R7aoEfPMjEY/buh7phr1AHZzMryfmOHcAfi6YW+VpABCYZVhZerXArB4KmFE/3igSoWlaB8rH8qcKqBKLBCHDyT4pzxI3XjYZymX5LQft68BcLHrd2aqchmtWbmCh6LWeRUfmay5rPgI5NJeHphplAtpYmjfANE1XEsWmUN7vntfr/tbj/WhLt/u89wX5GEOl7ISkmJwUbUWGp6e3uxb98+rFq1yvtZXFwcbrzxRrzzzjua6/T09KCn57L5u6MjNG+Ng41QWiaigVB3zDUyk8uWix3HmjQntgEJQtcoLSkBQ+LiEAfzCVKm/XyfdmdsF+BUzuVfa07jpuKrfD6TIGFInO/72sRRqZZcRUZcl5OKikUlqGvqFOrNFFrsRRWtefMo3lg+GzdX/Muwf9So9GGG26k6rh2obZSunzY8ARlJQ4U6wD8w/2rkZyb73ed61ph/Lxutm733Tl1zVD+bHpxfhJbuHp+0bzZUjiJLzdmzZ9Hf348rrrjC5/MrrrgCp0+f1lxn9erVSEtL8/7Lzc0NxVAHHaG2TEQ64XqL0sv+qFhU4hMwqoXZNZKFq5UmkBK0rUh62VR20LIG3r/pIHbU+k6shx10g9Vcsm69/0lkvSSVj83EtZeK0lll+7EmXJQkvPfY5zFxVKqfNJLvXbMmpmbp6SmJ/tayjvN9uP3Z3TjTYRx3A8ArZNT3uZZ1aPuxJtz7krEVcreO4Ilk5GzGW9ft8gqa4pxUvLF8lmYG42AjakSNHVatWoX29nbvv4aGhnAPKSYJtWUiGjByCYWatKQE/Nxkv2bXyE4xshmFmX4VVCtXzsWrd5drij47qKvR/rXGk02ltgyIFvYTZWftWbywq97ZjRog8qA+33MR//vWMdv7kIXtb5fNwPVF2T7fyfduoBOGVi0iCcChxg5TQaSV9g3olzUQIZTZck6hJeA++OQc1rzpTNB9tBM17qesrCzEx8fj008/9fn8008/xZVXaqcjJiYmejuKk+BhFqwarebdQHAy5dOJjLLC7BSUj83UDMIsH5vpeAbUzELfbaqDLZ2uqHuosT2kRffkcvlaRdjUpA0fIhQPY8QUgZTuAx+3B7QPWdhq3bvupISArle8y4Vrc0ZoVsgV5Uc6dVsCqf47XacNQ6RCV785UWOpGTp0KKZOnYp//vOf3s8GBgbwz3/+EzNnzgzjyAgQWZaJSELPJWTUp0lGNjPfsHabTy8edZEzUfTmXfXnWmPTd6l5Jm01LhcMx6m04BSPSrXUK0iLjbvq/VxOoeBLk67SzEqaNDoNv/hGCTZ+uywgQVM8KhVv3DcLf7jHY91yAvVDX8stWtfU6SPGtawDVpg1LgtPLrBXRDDO5YmPmZSb7vddW3cvfllZa2u7ImI+mIg8A9TQ1W9O1FhqAOCBBx7AkiVLMG3aNJSVleFnP/sZurq6sHTp0nAPbdDjpGUilrGSXmqUUWa11k1dU6dpwKRWKq5ybNo1M7JxcWAAu+uafVw8e+pahMZZkJUs3Ol7SJwLAwOST1xPvMuFkjHahchCwdq3jmoG1r73cTt+X/0xls7OD2j77zd2YM0/juLniz6Dcxd6A9pWnMvjEhwSF6fbr0zr/jQr/Pdf88fjJyauj7vmFGByrttyny8AmD0uW/fl6N6X9tu69vJ9HQ4CSTGnq9+cqBI1X//619HU1IQf/vCHOH36ND7zmc/g73//u1/wMAkf4azpEA2IChUnzMxKt5XdysPKsWkJV0mSNHvkWBmneruZSUOx5s2jPsdfmu/Gdz87Hqv/9oFP7ZtZ47Lw9WmjLVfbdQqjTKHtx5pw5/X5AW1fzk6764W9eDdA99LUPDeevn0q0pISdF8+tO5PdVd0NWaCBgD2n2zFxFFp6OsfEBI0Ly4rw8UByXuP/fVQIwAXZijcmnVNnZZq2sTBU2G54htTwvqMCuRlha5+c6JK1ADAfffdh/vuuy/cwyDEMlaEiogI0XuA6b1tG6FXeVhrbErhWnnkjO1xqlF2Ll46Ox93zSnAxQEJGUlDsfbNo7h9/eVWAsWjUvGjr0zEpNHppoXIwkm/ZNzhWhTRxpOG26hvxYpNB1CxqMTnGsriN94FzXE6EWM9ZYwb9286iD3HjUVInMtjmbm+KFu3uvDMwkw8882pptsqGpmCY2cu3xuzI6AYqBMvK0btG0gUihpCohUrQiUQM7PWm+CBk21wJyWg4/xFW5WHlWNTWoCcNIdribHiUalIiHPhvY99A0w/aDyHNf846mjLiWCQn5mMikUluPu3+3Tdf6FEaRHQOt/BwJ2UgFHpw4X2c/WVI7w1gO7fdECzIvU7dc1YsekAbjLpV/Xt2QWYUZgZUe7wQF5WZOjqN4aihpAQYUUA2DUzG70Jtnb3oTTf7RODIL/hNXcZ92jKz0zWjQWYWZiJquMtAZvDtcSYXraM8s3WbKJQF/tzAYiPc+Gi03neKtxJnqJyaUkJ2PQfMzD3J5Wob7aWqWPUvNAOyvP26JbDAQX/ipA6bAjeWD4btWfFrGnDhsQJxVeJuPZmFGZCMhDr4ehT5+RLAF392lDUEBIirAoVO2Zmswn+3nnjNCuyypWHtfo7zR7nyYxZvL5KMxZgemEGZo3LCsgcLlIiX4v65i7TiWJanq+Qk4CgCxrAU1ROtop4somMr81jX56ADbvqcUKxnHweV2w6YDnA1ojdddqVf52m48JFPLz5EB6cP15o+QMN7cKZcP2SxxWlZQGbluf2S/GXg3ElSGHrU8eYmOBDUUNICLEiVOyYmUXeBLXiKWQ3yT0v7fOJYRiQgL7+Abzb0KZrAdr1UTMqV84FANvmcLu1RuR96U0U0wsz/FomhIp+RQuK900qGg+Nd+GxP73v/btoZArW3jbZm8asVRI/EI6cPhfQ+vEuF1KHD/FzZ2ohC+HSfDf2nWg1FWaiwi0/MxnPfHOq3+9pTpEnI8+oF51TWYV2YExMcHFJRva5GKOjowNpaWlob29Haqpx2XhCgomWUBExh18O6nShX5I0l73tmV1+k4f8Jig/tPVcSX39A9hT1+yXNn3tVSMMO25vWFqKeVePFD4OrePSyqLSQ3bLyJanjKShmpNbX/8A9hxvdryisBWKc1Jxvq8fHzVZqyHiTkrAluWz8MhmX4tDnMv5CslWmVOUjScXFOPhzYdCVvBQvX/5Xq5r6sSe4y1wwVNMTy8jT4TKlXNDZi1hTIw1ROdvihpCwoxI3QqjoE4js7re9mRXktrVZHeyrFw517TOjRmL11cJu1jcSQk+zSTnFGXjwfnj8cEnHZBwOZ5CdHJbUJKD//vZ8d44Ezsl94NB6rAh6Orpj5jxAJ7moL9dNsN7TeXJ+dP2C3joNeNWB05QkpuG55dO13UjfX3aaCwX6DyvhVKcRxLhiP+JNETnb7qfCAkzInUrjCq6GpnV4+CpTyJSA8dMTBSPSsUHjed0YwH0Ym6Ux6H3cK5r6sTXp43G+d6LmunL8S4XpoxJx703jMMv367F/pNtPt9vP9bkc0xFI1OwqGyM8QEp+D9TRqMgK7IylQDjOjjh4v3Gcz7XVJmKHwoONLTjzheqMSQ+DlXHW3y+21l7Ft299s/ZkEBLWztMIIX6BisUNYSEEZG6FdKl/+vRb/D9ADw1TqzUwNHjR1+ZiDX/OKoZC2B2HO82tGGtqqDenKJsPLHgOj/3SkluOtrP96FOUT5emaUlUrPl2JlO/L8/v2+6HOCx+sgNHNOSEpAQHxcRLp5wYXbs6poqSqGqFdsUDPTugX5Jwt4TrSjNd2P/CeOeXFp8a31VRIkGJ6uKDxYoaggJI6Hq5WKlBk4c4BdTM2tcFiaNTtcNXN7fYCw0Vr76Lj5SvcnvqG3Clyp2oEvVuflAQ5vP36X5bu8kY7Yfq6QPT8Aby2d7/7abhRVLTFVli+lx+JR/E9HysZkoK8iwbelyovknACwpzwdQbysVfmdtk65oCKUbiM0r7UFRQ0gYEclWciLsTbQGjpwtZJSZoa6PIdJUUFnZVWZAEnOv7D/RhmUvVGP5DeP8Gmra5coRifjJ1yZ7LTQyZllKSuJdLpQVZOBi/4AjFX/9tw+kDvcvmGiVopEpqGvqMt2G3Ebgf746GYAn7XuVQYzMC7vq/dyAe+paMGtcFipXzsXuuma4APxx38eewHWDfeekD8MVKYl4z6Hsruty0nDvvHFYuqFad5m8jOE40XLe73Nl1pp8n4fDDeREob7BCEUNIWFEtG6FkVlfXhaAIzVwjHoDaXH/poPYf6LN8rGLIrsU5AnKUxm5D/0BaL3T53ogSZ42D8pjfH5XvfA2puSl45lvToUECXdt3CtsFYgDMDk3HcOHxhv2LpqS58Zt00bj1b0f+2y7JDcNFy4O4INPxNKyF5XlYuuRs6YWqAEAhxo7MG/NVkzLc+OLJhV7tYScbEX43h/e9Rlz6rAhhgL2dPsFNLZdMD4QAVzw1KgpyDJ/GdASNEqUoiEcbiA2r7QHs58ICTPt3X2a6cjKt0CtZdTLAjDdjhqraaVq87vVVGwniIMn9kWZ/RQonuypIty6bpfl9S4ODGBPXYuwNcWd5HF59Q0M4C/vfeKxCGQn40uTctDQ0oV3PmrGjmNnUaOwGpXmuXHbtFy8urfBR0wU56Ri+byxuOcl/Wyf0nw3nl1cipbuXtQ3d2HIpWrK8qS4YtN+vN/Y4WgMkTouJ84FDB0Shwt9RvYa55D7Q81dU6l5n8S7YCqKVy+cKJRFV7lyLiRJCopbSitLUV2eYbDAlG4NKGpIJCMiMORllBOTetlg1L/QM78Hkj4bKHIn58zkoVj4y10BVQmOd7lwbc4Iy8Xt1PFHYvsCUob5x46kDU9A+3ltoRYHYHhCHLo0REFJbho6e/o1XXye/elPgu82tFoWcuFg+JA4nL/of+zpwxPQpnPOpuW5HenenpIYj05V3JeS4lGpPveNk24pkReewQJFjQYUNSTWCVYgo94bY8mYdEcmDjtsWFqKvIwk7DneYhj7QTyoC8u1dfdi9o/fNpywQ40dkRhu1FYpIxFp9/fJQn2sU0PIoCKQQEazB61RFoZe+qwyzmfHsSbDiSre5UJyYjw6L1y0NKH98u1axwN0i3NS8cEn5yKq2J1TqANL73xhb8QIGr0g9UjGBU8fMbWBUCs7KdBAYzavFCc8TVEIIY5iFMioR1t3Lxavr8INa7dh6YZqzFuzFYvXV6FdFYNgloWxpDzfK2BkZo3LwhMLrsPFgQE/oZI23PchPiUvHR0WBE0cPHEp6swbI1KHDcGGpaXY+G3jOISFU0ZhSl668HajCWVgaV1TZ0AWNrMadVZr2M0al4Wnb5+KjcvKULlyLlYvnGh7bEpSEuMd2Y4WYzKGG36vLMdw70v7/cTa9mNNuOelfUEZ22CGlhpCHCJcpczt1rMQzegwy8K4LicNG5fl+JnIF6+vwp4634qvcS5g8uh0PH7rdd5lD59qt1RPZGq+WB0VGTkwNzfTcxxGmWT/788fAAAm5qTi7n8bi+cvpS1Hu+WmOCfV5x6wW4BRZva4bLz7cZtmDNCIxCHIy0oSik9aWp6PxeX5PmMryEp2rD5TZ0+/aeaVXf6/BcVY/Jx+yvgvK2sxJdeN5q4e3Sy3XR81s96Mw9BSQ0iAiFo8goWdAn6yEFJP1kohJCOnnatrxMS7XJhTlO19IBdkJWPe1SO9WVFa2x+4VAMEgHdZ0TTqlMR4vHHfLNw7b5zQ8iNHDMXjt0zAgR/O9woawJPOrrYsqalp7MAjWw7hf7/2GdNlo4EffcXX8mEmVLUozXNj3aISVK6ci8dumaAb1Hyu56JX0CQlGE8xakETyPj0+NHCiSjNc/t8pmfBGRLnMp0U5ft+zviRmr8Lmer6Vtz9233Yc9y4EOGeCGnJEStQ1BASIHZcP05ip56FmRDarXrQagmBkjHp+Pq00T4CSHT7stASdYOUjEnHzu9/FpNGp5seb9HIFADAmXO9ePSN9/0EZlpSgsLNUay7ndbuPjzw6kHvssWjUuFE7b84ACOC6Bbx2ZfLk50zQuXyk4Wq2eGsnD8eG5aWonLlXLx6TzlunpyDgqxkYUvPhb4B3X5K5WMz/fp/VR45g+Nnu3SFtB2uy0nDq/eUY8vychTneAJMtWKJSvPc2LK83C/GRT3+KXnp+Fqp576vWFSCkjHpuvt+p64ZZ8/1Go4vum2AkQdFDRl0KB+eTmxL1OIRLEQtKUrMhMGq12p8xIBSCFR8owSl+Z502eWbDmhapkSEVlt3L+5/xVz4eURAgneyMTped1IC6pp8z/m/jjXhq7/a6XctCrKScWWacVxEdf3lvlkvLZuBaao3fhHUMUSzi7Kx4/ufRWme21RUWCV1mG9EwYAEHDrVoXmNKhaVYKrJ8dw8KcdrUVMiakkZAHBxQMLEUb7ZKnOKsvH07VMB6Fs6n1xQ7CekS/PduGduodC+AU+9Gnnsa9885lewMA4e15ws2n7896PoUKXaS5JH8PzwS9eiaGQyqutbcd/Lnvt+xaYD+GKxcZFCs4s8ozBT+HiIOYypIYOGYJQ6j5RS5kYVgrXQq2SsRCu+piArGY9uOexXQVi9bGF2CmYWZmr2AJInmsXrq4TaEgzAv2y91vHqpZdLAI592oV5a7Z6i7LJ11tkcpavYVpSAl69uxyTHvuHUIxG0cgU/HrxNBRkJWum5D67pFS3oKJVVi+ciFHpw9EvSRgS58KP//ahp6CeYhn1NUpLSsAf7inHbc/s8rQx0EhL1rt35ftHdOwPzL8a+ZnJmmnJepbOhzcf0uw1VtfUiae31gntV9a9up3p4amibLRMvySh+kSrZqbdztqz+KTduDJxdkqi7m/hM7npjKdxGIoaMmgIRqnzSCllLltSrNSz0BIGSrQCja0EJet5Dlwue40j3z/V7lO5VXm88S4XDjS0mrqy3qlr9hNfZkXa4l2X2ylIkiQcdLr2a5MhSZJ33XlXj/T5Xr5mWqLCCuVjM/G3mtOm51MvcPzZxf7iykgQyzw4v0j4Gsr3o/qeFL2flOuJCHIZORBX5OWjs8d6MHG/JOkWPZSZXpiJm4qv0vytHWxow+L1VYOymF6woKghg4JgdbwV7d0UKqzUs5An1VeqTuIhg+J1SmuTqGWqrqnTMONjz/EWze+M+N4f30NX7+VYiDlF2XhiQTE27Ki3JJDU13v9klLM+UmlZuBr8tB4nwyX4lHiRTt/8HqNaaXZuqZOW52kZcrHZkKS4CfWjdhd1+xzj9gRxADQIhAIb/Y7MLuf3nj3FG6ZPEqzd9ndv90n1A28vrlL6OXje39413Rbelx71QjNXlzKuCE9ARvsHlKDDcbUkEGBnQwhI5RxOVpBtCJvupFCWUGG4fdKa5OoZco8kNS6WUIpaABPUb9b1+2wNKHLKK93WlICJlylLVbU+7TSxfuwKqVZK3jcTmp1RlICnlo4ERu/XYYvT74K79Q1W0o5V8dLySiz10QQcd2Z/Q7MtvHTt45pxgOlJSUgIT5OqB5OfmayadyZJEkBicsf/59JmKPq+K6MGwIuC1ijYn0kcGipIYMCp9xERnE5csPAaCtlnpE8FG6NBpHxLmDWuGwh07/6jdzsfM8ozBJ2IegxANhuaqkuRCfyxg/4V481Qr2ollXQTupyS3cf/rj/44AmYSesA3r3QhyACTmpqPjGFNPfgagrST1eEfel+p40ijvb32DvXMbBE/g9aXS6qbUrUuLvYh1aasigwE6GkBZGcTlW33Qjhfs3HdSsqZM6PEHzLVvEMiVyvh+cX4Rrc0Y4dBTiFI9ythCdVWQrUVt3Lx57431b2whE0ADOWQe07oXZRdl46c4Zwr8DkbpB6vGKXDP1PanM4JPT1DcuK0NaUoKpuNSbKGdfeqGRMXoGiLxYOZmZOVihpYYMGqxmCKkJVlxOODF6423t7kNLd69fAKNoDIbe+X5iwXVYvL4qbD1+nChEFwiylUhLIMuomyTaZWFJDl470Kj7/e66swFZF+3G4+ht4413T+Gnbx3TXVa2ZphdsxeXleF6lTtIRivuzMgCqdWTqnhUKn70lYmYNDpd4AjV+2hCv+rapg1PwMOv1/jEoQ3WbtyBQlFDBg2BPoBj0XwcyDGZBSU3d/Vg6ex83DWnABcHJJ/2CXbiYLRIHhqPC30Dwi6s0jy330RkJZvGBeC6nFRvGrBV5HR2M/eJE4IGgKGgAYBVrx3y/n/iqFR859/G4rqcNN3GpnptQJxouFiQlYwvT8oxFDWyIDRzg+oJGiOMXnrSkhIc6ZRdsagEc9dU+rlN28/3+QXWM4DYHhQ1ZNBh9wFs9naoTP1VpkCHox+UKMFIST94shWPbDmkmfljJ5XbiMe+PAF/es83nXlInAsXNVRB6rAheHZJqeZ2zNLbZa4blYp75ozFcpvVomVvXKhdXiLUnOrAfS97jktpJQhGfSc9rGQTBmp5VWP20uOEcGvu6hGOA4tmC3A4oaghRBD9B64n/kSZ+juzMBMuF8JiThYRUsplnEpJ15r8ZOS3zqWz8y0dy8RRqagxaIw4rSATt5WO8ZmIMpKG4s6N1X5xJx0XLmLFpgOa10Ce0LYfPWPYpLBi0RRIATS3lOumhNrlZRX5ej12ywTc/8oBv6yvYFoRRMVKoJZXvd+JE+JFDztiNhotwOHEJQXyC40yOjo6kJaWhvb2dqSmitebIESmvbvP74HrTkpAe3efT/VWLWShECxzssgbtdYycq0TZQaQVQFW19SJ+185gMOnOgyTtTd+u9RQNKiJd7mQOnwIOs5f1BRdRufytqcv1QRRbc9ovbqmTtywdpvuNitXzvVxodnJ3Fq9cCIWlY0JaBtq5hRlY+Xnx6O5qxen2y9glUHdoX8vy8UrVQ0B7xPwHMuMwsygTLpOuHvU1DV14vAnHdi4q95H9IbyhcPo/tJCvucGO6LzNy01hFhA/XYY74LwJB1sc7JIxWStZfbUtWDWuCxUrpzrrc7bL0maQcJK6po68X5jB17YVa9ZQl6LfsnTv0c0e6dfktDa3YfSPLfPPszcDHVNnZpj0rsG8lv7p+0XDMcjvzVrWRPmFGXj7n8rxH9vOYSPmvSzV1a9VoO/1ZzGkwuK8fDmQ7bdcT/80rUoyE7xm/Trmowr3L57ss3W/rSQxVMwRIGTFhMjKyIQuvgVvfIJWoSrgGe0Q1FDiA3kB+6mqpOW1w2GOVkkM0u69H+9ZTrO9/pV59WarMwmCCPyM5OxpDzfckryvTeM0+0dpIVoALTVY5FjjIxcHyNHDDMUNYCncOA9L+1DxTemeMfzy7drsf9km7DlZt41V2ieB7O+TB+c9q98GyjBFgWBxqYZZZoBoYtfuX/TQXRoVK5OG56A63JSfdzV0VTAM5KgqCHEBoFO7E6gfNA7UTH54dcP+ZV615qszCYILeJcnoJsb7x7ClelDrO0LqDfO0gP0QBo0WPRe2tWj0m0kJ/cSHHemq1e4fjIlybg4ddrhDKrSvPdhufCSl8mJzASBYEIEitBynr7sRKcHsz4FaNxtJ/vw5OXSg1EYwHPSIKihhAb2JnYnTInaz3op+W5DdeRmzEaoTWZqi09e4632Jos41wuHDrV4c2Iio8D+s2CkGD/nMnWih21Tbrdp61MdvJbs3riVP9tp6fVjtomXP8/b/s0yiwelYqEOBfebWj3i9VyJyXg2cW+WVzqcYj0ZQoGSlGgdZ+W5ruxpDxfN21cjYhLVXM/eW48u6QUaUkJloJzP22/EDRrjciLRzQW74w0okbUPPnkk/jLX/6CgwcPYujQoWhrawv3kMggRWQy1Mp+csqcrPWgP3CyDe6kBN2AWvlBqZfpdG3OCJ8UbDUrXt5vuzbL8AQXzvf5CiotQePkOWvr7kVf/4BfvZfphRne7ZlNMqsXTsSVacOQn5kMd1KCZoC4MjaieFQq/m28cWVcLQYk+HX+/qDxHKYXZmC2yo2knKzl49SyZDw4v8jyOJwg3uXyljV4dMthv/u0ur7V63o0i8MRLXZ5/6aD2KFarvpEK+auqcTWlfMsZZo9FMQYoWCUTyD+RI2o6e3txW233YaZM2di/fr14R4OGcSYTYZPLZyIfy8bA8D5DA6jB31rd59fEK5aFOilyz44vwi3rtulu18rjRzVqAWNmjgAU/Pc2PQfMwDYO2dqS8X9mw6iSmU1iQMwJC7OO1GZ96e6nNWjVTBQHeyptEQFSr8kYddHzahcOReAvktCz5IBaAvYYOECkJwYj8XPVQmvYxaHI2LZ0IsTAzzX586N1Xj17nLL5yIYMUJWavAQ+0SNqHn88ccBAM8//7zwOj09Pejp6fH+3dHhzAOHDG7MJsPphZne/ztd88LsQX/vPOOAWqMAV83mhJfK9Qt4imwzAM+btfzmrTxnZvEYeq64vRqZTwOAzxu+6CTjdMFAK6x4eb9PHyXl+TAL/H5j+SwAsOcuhLVrLgHo7Ok3XU6JWXCuiGXDLFasut5zX2mJ+dI8N24qvhL/7y8f6I7tX8eabFUn1sPpgoHEn6gRNXZYvXq1VwwR4hThfOMSedAbCSnlpDjv6pE+32k9cCfkpApZH0rGpKO9uw91ATTiM4vH0HIJaFkq9pukl++ua8buurMAXFj5+fEAYDjJhLP67+HGDtz5QjV+s2Sa3/kozjGutdXc3Wu5/IBeryMjXC4gEGOQXnCuyO9MpMyavH0tMf+n94zbSHxrfZWjrignemURY6Ku+N7zzz+P7373u0IxNVqWmtzcXBbfIwGjVYRP+fALZnsEraJtZkXlrGSRKB+4kiQZFgtzwWMZefWeclQeOYOlG8QL66lRFhn76tO7sN+kcJ6dQmZazCzMxKqbrkFzd6/m9QpkPznpw9DYdrn2zczCTFzo68eBhjZL20kdNgRdPRd9GiGaWVO0iraZFfxT3hPyffBp+wVvrEkw2PjtMvRLkmbwdUbSUMPfGeC5V7QsczJGxetue2aXaXmBYBfNJGJERfG9hx56CD/+8Y8Nl/nggw9wzTXX2Np+YmIiEhMTba1LiBF6b1xt3b1+HaidDjq0Y8IWySKRUVt6tLKIZCRcdh3ZLf0f73KhZEw66pu70HG+D0/85X3NSUrtrjCzoIh2un6nrhlr3jyqO2lZaXipRhY0xTmXujrnpgMAFqzbiYMWhI06kBi4LGjUx2lkMdR0w+hkJMn3gVkxP7u4AKQnJfjE4aiDr+XfTkt3r65lY/2SUs0mkfEuYNa4bEOrpUi9JPZgii7CKmoefPBB3HHHHYbLFBYWhmYwhNhALQCsiAe7WDVhi2aR6FGxqAS3r99t6IaS01GN3AV3zSnAO7Vn8a9jZ1GjCDxOHT4Ee0+0Clt5ZHeCmYiamideudjsPIg2vNTjg0/O+Qgnl62taKN2ERoJXDvuj8LsFMwszBSqv2MFCf7B1uq/lb8dvXGmJSVg68p5fv2+Zo3LNhT6Vt2K7MEUHYRV1GRnZyM727kgLELCSaDiwcp+9OJitBCtrqtHWlICfv7vJYYuGDkd1ciKlJaUgOuLsvG9my67uH5ZWYv9J9pMj0FrX2YxF4/dMgF7jrd4BYSZC8XoPCjFwJ/ePYX/feuYpTHL98C7DW144i/vW3Y/GVGx6HJVYqULZ39Dq65oUYrxbUfO4ODHbZgyxq0bFOvSUWHpwxNw7sLFoGVYif520pIS8Ord5ZbEmlXLIlOuo4OoCRQ+efIkWlpacPLkSfT39+PgwYMAgHHjxiElJSW8gyMEgYsHM6zExShxoj6GaHD05W7XTTjQ0Ko7UcpBnlbaJcQBmF3k607QElFlBRm4ODDgI8LMihMCvufBqINzINP3w5trAkqPV1M+9nLauVX354nmLixYt9PHOuJOSsAby2cjN/PyPVPX1OlTO0hJ23n/vlzBQPS3YyXb0IpbUXmeSWQTNaLmhz/8IV544QXv3yUlHrNiZWUl5s6dG6ZREXKZYBfXsuvacipbSySWx4rwsmr+Txk2xM+doOVO0Sr6Jhcn1GskOOeSWBIZ/2dGp1satxKn6tjIqOdiK/eIWtAAHvfPLet24MAP53s/My0joOjLZdYh3C7BspKIuhWjK51mcBMX7gGI8vzzz0OSJL9/FDQkUpDFQ7zKVh/vcnknTbvIri31G6XSPG9ExaISzBrnW+3Wan0MWUBUrpyLDUtLUblyLh67ZQL2N7R69280qapxD7cWON1x4SJauns1vyvI8rji5NotWueptbsPJWPS/dadWZjpPQ8i4/+3q0fCbWAZcycl+D1Y410u0xRsO7xT1+w991bukW1HzugKvNbuPvxLMcmLlhGYd/VITC/IsHsomjjx2zFCeU+vXlisu5zyPJPIJmosNYREA8EqruVEXIxT9TEKsjxtA0SL3unFRfz470cs79vsOM3O0/2fLUJ+ZjL21DVDgm/VYCsxUW8sn41b1u3QFAYd5/uQprIKeao2j8et63aKHKaXpxZ6mhwaxQPJ58TKPXLw4zbDZfefbPW6Da1a+opGpuDYGWcypoJRmE7LtViQZV7Ij4HC0QFFDSEOEqziWk65tpyqcGyn6J1yUhDtZq3G7DgDKU5oJgperT6J20rHoCArGSOGD8G4kSmaMUH9ksfa8eKyMlwckHzuAaP0eC2uSBtmak6Xz4nZsWcmD/X+38yFNmWMbwySmVgPpGu9EY/fep1jpRDMXIvszRQbUNQQEgScbo8QSX1j9CwaZmX1lZOC1W7WoscZyHkym9R+ua0Ov9xWhzlF2Th3oc+0zszFAUmoarPhPitrDYOp3UkJ3mOSj11v22v+cTmlXHahaVma3Jey1JSYiXUrXetdgHCwtZPWEbN4o0j6jRH7RE1MDSGDnScWXIfU4b7vIanDh+DJBfqxAMFApOidEu24CGuRl1bcECLxQ3VNnag8csYnTqIwOwWl+eZZUtuPNeFAQ5vpEWi92cvi4I3lswxjbOJdLriTEkzT3Vu7+3yO4cH54w3HrVz2jeWz/WKD5OwnPeTYGeW11IvlUSPfF1auvFPWEdF4Iydiz0h4oaWGkCjhkc2H0XHet7Jsx/mLeHjzoZCWcLda9E5rUphekKleTZcXl5VZaipoZFUwc0EsKc+3lGauhVbquZoxmUnISNavdl4yJt2w9L8SpTXj/U+Ms6uUy+ZmJuHAD+fjX8easP+kfvq9GaJZbKJ9xADnrSOi8UbszRT9UNQQEgWEqrCfCGZmepFJoTA7BSW56UJF6C6KBqCo0HIBmrkgJlwVeIbS1Dy36Zu91jjiXMDY7BQsm10AAMKiJj9TOxVdiyFqMxqA64uyA+pEbSZyVy+ciBmFmaZ9xJQ4bR0RiZdRBxCLNIWl4Ik8KGoIiQKCXdjPKmaBoyIxRXfOLsByjVRvNU67INQohaEs2HYcazKNEVLjAjAt341X7y63NY4BCTh2plO4eaTSmiE3qjTDrkA0wkzkLiob4/2sNN+4dcWDnxuPrBGJmFGY6ViAsNkYywoy8OiWw6a1lewWvyShhTE1hEQBkZaZoVWzZuOyMksP92tN6rbEAY7WKBERhgBsT1LT8t14dnFpwOMQRRaRojEtQHCL2InEojy7uFSzxo8LnnietW8dxarXajBvzVYsXl+Fdp1aOk6O0eWCUG0lKzWYSPigpYaQKCBSMzMCyfIyK1M/u8i4IaFVRIXh8bOduoXptIiDx+VkZqERHYcRpXlu3FGejwmjLnfU3t8g5qYKRRE7M7ejt/nkC9U+rRXSkxLQcV6/maUSu+4frTHqucTUbt1Icv8SYyhqCIkSglXYL5w8saAYt6qK2KUkxuPX35qGctVbtRlmk52oMHxkyyHD/RTnpOKQon/TlEtCQ3RiuzyOJvQLeINWL5yIK9OG6R6XqEhaaZAZZYQVESEictOSEvDqPZebT8a7XFj8XJXfcmrB4JT7RznGyiNnDJe1U9iQhBeKGkKihEAyMyI1uPGRzYf8MrrO9w7gmW11fqJG7xisTHZmwrCuqdM0Q6fiG56u2Ica27FxVz2q61u9Qb2ik2zFohJc/z9vo+PCRcPlAN+qx1oUZqcY9rWSadZpMQFon1unRIRRc9CCrGRhYWG395kRota7SHP/En0oagiJMqy4fCI5uFHUpG92DFYmOzNhaPZGXpyT6l3+0S2H/erIiE6yzV09poJGJDUc8JxHEXeZPPEqRYZWuwv53AYqIkTvPdHMpGC4f0Std5Hq/iX+MFCYkBjGqeBGrWJ1gSIauGt0DKJF1eTxbz96xmsZUBeRA8wn2B99ZSLqmjqxqepkQA1GRYKFRVLDRbYV5/KICXdSAhavr8INa7dh6YZqzFuzFfPWbMXOWl+xsLP2LO7cWB3Q8QHi955II1jRe0ULs3tXNMiZhfmiA1pqCIlRnHi7Daalx4k3dLN2C/f+dh/Sk4Zq9pnSO47iUal4v7HDpz9TnMtTMHDNm0eFWhyYxViYHfvEUal49R7z1PATLd2I9y8944MsjlZsOuAnMrQsPP2SZFqA0Oz4rN57Zm5BO+4f0XvXSpAzC/NFPhQ1hEQhIjEyTgQ3BiOOQUbEpG8Wb2FWdP+D0+d0v1Meh1nxutnjsnFxYEC4v5GWq0eSJO//zerhpCQmoL27T1M4ao3VneRZXrktZVaWnsiwi1kMidV7z0ww6N0rcS5PpWI1dU2duP+VA3i/0Tc+yujeFXXrOt3XjTgLRQ0hUYQVy0mgwY2hSGMN9A39tX2nbO9beRyPbjmMHRrHmpQQh1f+YyZShg0RroYLAB3n+7B4fZWukJhTlI0nFxTj4c2HNJepOt6iO/lqCc2O8x4BpLS8KFPi7dTGKc1zY//JNs10+0e3HDa01tm994wEg9a9MiABh051YN6arZhTlI0nFhTjEZ1zCjAFezDAmBpCoggrMTIisQpGBBLHIIpZET+jY3AnJWD/ybaAx7C7rhnbdSwm3X0D+Ob6PaY9ldQ8vLnG0Kqzs/YsHt58CI/dMkHze73YFf0YIo8r6cVlZZrn0UptHPn+eHZJqV8MiXL8RnFZgd57WijvleKcVL/Ja2ftWdy6boeQNc2Je5dEJhQ1hEQJokGxSgIJbgxlGqtW92fAc8xfKx2NKXnpPp9PyUtHa3efUBVdM0xCUtBx4SIe+uN7lrZ56FSH4dhEY4LUk6+Z0Lw4IGmeRz2REQf4VfiV74+0pATLoktJsAJrJUnCocYOPxHaL0nC9wRTsGMXup8IiRLsxMgEEtwYzjRWLTebsppufXMXlm6oDmgf8nGUFWSYLtvZ0y+8zWuvGuFTnM8Y4wlYPfkGIjS13Deyi6qlu9dWirtRXFawAmsPW7SaqSkelUrXUwxDUUNIlBDIhGY3uDFcVYy13Gz7T7Zh+NCPsXFyDiRBC01JbjqGJcRrZj8pLRLT8tzCXbGVpA4b4lNvZta4LDw4fzxuXbdTaP0ZhVmWhGMgQtNIZKQlJdiqVixi8XA6sHbjrvqA1v/RVyY6MxASkVDUEBIlhMNyEo40VrMA5X8da8L1RdlC3bTvv7EIeRlJqDreAgnAaPdwXByQ/I5j/ZJS4Qq/SlZ98VrMKMz0Ozdm3ahlHt1yWDNg2Eg4Bio0rYiMSCs6V9fUaXheU4cNQVdPv6YLSi5mOGl0evAGSMKOSxJ95YkBOjo6kJaWhvb2dqSmGncIJiQSae/u85vQIqVCsFNUHjlj6lqSs4f+8/cHDS0spXlun8aJynOlTotv7+6zJWy0zv+f32vEfS+bFziUxcHGZWXYfrQJBxpaMWWMG9cXZZuuGyqhGUn3nNm98ZP/Mwl/eu8TTVEca7+TwYbo/E1RQ0gUEssFwOqaOk3Tp5Vi4LZndmHfiVafYnnxLhdShw9Bx/mLfhaG6YUZGBIXpzlJA8CdG6t9rAFaNWD0xmLlGJSoLTtmE3A4enkF+54TOSaz81q5ci4KspK9Yx0S59K0zIV63CRwKGo0oKghJDpYvL7Kz+WhReXKuchIGupnSTBz/8QBPiJFLUyUE7jW9vXGopzURI8B8BSRU4sytVACIruXl12sHpPWedU7X8EkFq9FJCM6fzOlmxAScWilA2tR39wFSSOD6HyvcbaSVjqwMkVZmWIuxxU9tdA4wFSdfi16DICvoNEaj4xTvbyA4PTzsrNfq8eklyr+4PyikB6Pk9eCOAcDhQkhEYcsJLYfPYPFz+nHUORnJmtOLury+KIYpSibpX6rM4HUQda/fLvWr0KvC8ZJ3Xvqmr3jcarCc7gsDFr71cs6Mzom9XnNSErA2jeP4dZ1u0J2PKGotk3sQUsNIcSHcL3BazFn/EjDyrTSpUlE7eKRLTFxqsp66r/VGKUo262SK1t9tCr0mjmmHnqtBovXV6G9u8+xCs/hsjBopumbpNEbHZN8Xte+eSzkxxOKatvEHhQ1hEQRwRQcbd29WLy+Cjes3YalG6oxb81W74QaTowq05pNLupmh7PHZWNmYabt8v2BVMmVLQyl+W5TcaVEnqCdqBljpyq1E+jt1ygdHxDvTxbq4wlltW1iDbqfCIkCQuEyCGZH7kAwqpVjNrlULJoCAD7raaUoWxUmdjOBzOqsaCFP0K5LwiuQmjFOdG63g9l+9QKlnehPFozjibT6PeQyFDWERAHBFhzRECOgVTROdHJRriciTMzSdO0mjdrpli1T39wVcOE9qxYGp9KVzfY7Nc83Wy1S+pMZHX+4qm0TYyhqCIlwQiE4zCbb3YqA1UjD6uSinKjmXT3S5zszi1igFjMr3bLV5GcmB2wpEhWBTlsGzfYbaf3JRI4/HNW2iTmsU0NIhGNWRXXD0lK/ydkqIsXiIr0Gh9nkIjJRmdVAcaJGypcq/oVDp/Szs8xq6ASKSIXgYNSCCVZl4mBsN1Jq4ZDLiM7ftNSQmCfaK36GIihR741XSSTE12hhZHlRYubCM7OIbT96xhGL2ZMLin3Sj9VMVbV2cNqlYWZhCJZlMFiWDae3Gw2uWKIPRQ2JWWKl4meoghK13DhKIu2hbuX6ikxUZi44rU7fSkSDUifnujWbcQbqirGKXmPLYAffOt212+nthiv4mDhDVKR019fXY9myZSgoKMDw4cMxduxYPProo+jt7Q330EgEE0sVPwNJJRbFbuXccGHl+opMVGYWsR3Hzhp+b8ViVrGoBLNVTSuV11NZ0TjUDPZ05cF+/NFOVFhqPvzwQwwMDOBXv/oVxo0bh0OHDuGuu+5CV1cX1qxZE+7hkQgk1kzIoQxKtFo5NxxYvb4iE1VBVrJuhVsAqDnVgdI8t19VYDsWs0gLMlW68EKZrhyJrmGma0c3USFqvvCFL+ALX/iC9+/CwkIcOXIETz/9NEUN0SRWTcjBMt0rCfVD3c7EZvX6Xj6mJvSrQobcSQnISBoKAFhanq8ragDgtmm5qG3qRKuiIGHq8CF4ckGx0LjVOHE9AxEGei68JxcU4+HNh4KWrhzprmGma0cvUSFqtGhvb0dGhvEbZU9PD3p6erx/d3TY6wdDog+akAMjFA/1QCY2O9e3YlEJ5q6p9BEkwOXsmY3LynBtjnFW5Kt7G9Bx/qLPZx3nL+LhzYdCHkDthDC4f9NB7FBZvHbWnvUeT7AsSZFa6FEm0ixpRJyoiKlRU1tbi4qKCnznO98xXG716tVIS0vz/svNzQ3RCEm4sdunh3iQH+qVK+diw9JSVK6ci43Lyhx9i9abUEVinuxc3+auHj9BA3jSp2WXldF2S/M9WUl6JflfqToZ0n5ZgcaMHTzZiu2qYGXA34Unx/Y41aIjXK0N7BDO2CZij7CKmoceeggul8vw34cffuizzqlTp/CFL3wBt912G+666y7D7a9atQrt7e3efw0NDcE8HBJhhCK4NtZx8qGunBRFJlQzrF5f0SaEettdUp5vuP5Dr9WErF+WE8LgkS2HDL+Xz4fTPcHYDJIEk7C6nx588EHccccdhssUFhZ6/9/Y2Ih58+ahvLwcv/71r023n5iYiMTExECHSaIUmpAjAy03SUpivOE6IjFPVq+vqMtKb7t1TZ2G68uEwo0SaMxYXVOnYQFA4PL5cNpVZPYmTdcwCYSwiprs7GxkZ2ebLwiPhWbevHmYOnUqNmzYgLi4qPSckTAQiuBaoo/WpNjZ02+4jpWJTfT6Wg2AVm9XpEAhEJoMu0BjxsxEUXFOqlfIOZVFqCVulTC7iDhBVCiDU6dOYe7cuRgzZgzWrFmDpqYmnD59GqdPnw730AghBui5SYyQJ9RgEKhLUmt9PYLpRgk0ZsxMFP3oK55aRU66irTErRK6hokTREX201tvvYXa2lrU1tZi9OjRPt8NotZVhEQddrpSyxNqMAjUJalcf3ddM1a9VqO7bLDdKIFkqOlZneJcwOxx2ZiUmw7AuSxCPYuPzIvLynB9kZjVnhAjokLU3HHHHaaxN4SQyMNKV2r1hBpMAnVJyuv/reZ02Iq0BSrQtETR7HHZPqLIqZpFZuL24gBfTokzRIWoIYREJ/qTIpA6PMEnxVo9oUYDkVCkza5AExVFdo9RWRSQdaNIqHBJg8h/I9q6nBDiHHJxO60icS3dvTGRmTYYMuxEj1GvKGBf/wCqjrdoWnxCVXAvEtsyEDFE52+KGkJISBgMEz8BFq+v0nRXTc1z49iZcz7WOXdSAt5YPhu5meJuSjtEelsGYo7o/B0V2U+EkOiH1VljH6OigFX1LX4F++QWE8HGavVlp6onk9DDmBpCCCGOYBYQbNaSIRhYqbVDi070Q0sNIYQQR7CS7aYkmDV9rNTaCbSfFgk/FDWEEEIcQa8oYJxLZ4VLBDP7STTzKpoabRJ9KGoIIYQ4hlbV5dnjsjGzMNN2BeRAEK2+zEabsQFjagghJIREQlpxMMegV/9GK7U/VDV9RGrtsJZObMCUbkIICQGREIQaCWMINLU/EEGm1XlduS29dPRQ1tIh2rBOjQYUNYQQJaG0mkTChBkJY7CLk4JMb1tPLijGw5sPMfspAhGdv+l+IoQMOkJtsbCSVhwszMaw/egZ9EuI2OKIRplJVgWZ3rYe3nwooH5aJPxQ1BBCBh1OTpAiiAShBnvyNBvD4ueqvf+PNOuEk6JQdFsUM9EJs58IIYOKcKTuRkIQqpUaMpFWm8XJzCRmOcU2FDWEkEFFOCY10bTiYKI3Bi0irTaLk6IwEgQmCR4UNYSQQUW4JjWt+i2hSmk2GoMRkWK1cFIURoLAJMGD2U+EkEFHOLOAIiEIVR5DvMs3lkbNG/fNwqTR6aEbmAFadW7sxv44uS0SGpjSrQFFDSEE4KSmZPH6Ks3AWcBzTiIt1dtJURgJApOIQVGjAUUNIcEjEirlWoWTGvBuQxtuXbdT9/tIstaQwQvr1BBCQkIkVKm1C1N3gZbuXsPvf/B6Df684voQjYaQwGCgMCEkIIxqvpDIxyxw+tCpjojJgiLEDIoaQohtwlHzhThLYXYKinOM3fGRkgVFiBkUNYQQ27CQWWzw5FcmGn7P2i0kWqCoIYTYhoXMYoPJuemYU5SNOFVdPtZuIdEGRQ0hxDYsZBY7VCwqwexx2T6fhbo4ICGBwpRuQkhAsOZLbME0dxKJsE6NBhQ1hAQPToaEkGDBOjWEkJDCmi8eorEIISGxAkUNIYQ4QDQXISQkVmCgMCGEOACLEBISfihqCCEkQFiEkJDIgKKGEEIChEUICYkMKGoIISRAWISQkMiAooYQQgKERQgJiQyiRtTccsstGDNmDIYNG4arrroK3/rWt9DY2BjuYRFCCABPRd5Z47J8PmNFXkJCS9QU3/vpT3+KmTNn4qqrrsKpU6ewcuVKAMCuXbuEt8Hie4SQYMMihIQ4T8xXFH7jjTewYMEC9PT0ICFBrAYERQ0h9mBBOUJIOInpisItLS146aWXUF5ebihoenp60NPT4/27o6MjFMMjJGZgQTlCSDQRNTE1APD9738fycnJyMzMxMmTJ7FlyxbD5VevXo20tDTvv9zc3BCNlJDYgAXlCCHRRFhFzUMPPQSXy2X478MPP/Qu/1//9V84cOAA3nzzTcTHx2Px4sUw8p6tWrUK7e3t3n8NDQ2hOCxCYoJwF5Sra+pE5ZEzLFxHCBEmrO6nBx98EHfccYfhMoWFhd7/Z2VlISsrC+PHj8e1116L3Nxc7N69GzNnztRcNzExEYmJiU4OmZBBg0hBuWDE19DlRQixS1hFTXZ2NrKzs22tOzAwAAA+MTOEEOcIV0E5I5fXxmVlQdknISQ2iIqYmj179uAXv/gFDh48iBMnTuDtt9/GokWLMHbsWF0rDSEkMMJRUC7cLi9CSHQTFaImKSkJr732Gj772c/i6quvxrJlyzBp0iRs27aN7iVCgkioC8qxhxIhJBCiIqV74sSJePvtt8M9DEIGHWlJCdi4rCxkBeXYQ4kQEghRIWoIIeGlICs0Rfdkl9fO2rM+Lqh4lwuzxmWx8B8hxJCocD8RQgYP7KFECLELLTWEkIgi1C4vQkjsQFFDCIlIQuXyIoTEDhQ1hBA/2MCSEBKNUNQQQrywmi8hJJphoDAhxAsbWBJCohmKGkIIAFbzJYREPxQ1hBAArOZLCIl+KGoIIQBYzZcQEv1Q1BBCAISngSUhhDgJRQ0hxAur+RJCohmmdBNCvLCaLyEkmqGoIYT4wWq+hJBohO4nQgghhMQEFDWEEEIIiQkoagghhBASE1DUEEIIISQmoKghhBBCSExAUUMIIYSQmICihhBCCCExAUUNIYQQQmICihpCCCGExAQUNYQQQgiJCQZVmwRJkgAAHR0dYR4JIYQQQkSR5215HtdjUImac+fOAQByc3PDPBJCCCGEWOXcuXNIS0vT/d4lmcmeGGJgYACNjY0YMWIEXC5XuIdjSkdHB3Jzc9HQ0IDU1NRwDydk8Lh53IMBHvfgOm5g8B67E8ctSRLOnTuHnJwcxMXpR84MKktNXFwcRo8eHe5hWCY1NXVQ/QBkeNyDCx734GKwHjcweI890OM2stDIMFCYEEIIITEBRQ0hhBBCYgKKmggmMTERjz76KBITE8M9lJDC4+ZxDwZ43IPruIHBe+yhPO5BFShMCCGEkNiFlhpCCCGExAQUNYQQQgiJCShqCCGEEBITUNQQQgghJCagqIkyenp68JnPfAYulwsHDx4M93CCzi233IIxY8Zg2LBhuOqqq/Ctb30LjY2N4R5WUKmvr8eyZctQUFCA4cOHY+zYsXj00UfR29sb7qEFnSeffBLl5eVISkpCenp6uIcTVNatW4f8/HwMGzYM06dPR1VVVbiHFHS2b9+OL3/5y8jJyYHL5cLmzZvDPaSgs3r1apSWlmLEiBEYOXIkFixYgCNHjoR7WEHn6aefxqRJk7wF92bOnIm//e1vQd8vRU2U8b3vfQ85OTnhHkbImDdvHn7/+9/jyJEj+OMf/4iPPvoIX/3qV8M9rKDy4YcfYmBgAL/61a9w+PBh/PSnP8UzzzyDH/zgB+EeWtDp7e3FbbfdhnvuuSfcQwkqv/vd7/DAAw/g0Ucfxf79+zF58mR8/vOfx5kzZ8I9tKDS1dWFyZMnY926deEeSsjYtm0bli9fjt27d+Ott95CX18f5s+fj66urnAPLaiMHj0aTz31FPbt24e9e/fihhtuwK233orDhw8Hd8cSiRr++te/Stdcc410+PBhCYB04MCBcA8p5GzZskVyuVxSb29vuIcSUv7nf/5HKigoCPcwQsaGDRuktLS0cA8jaJSVlUnLly/3/t3f3y/l5ORIq1evDuOoQgsA6fXXXw/3MELOmTNnJADStm3bwj2UkON2u6Vnn302qPugpSZK+PTTT3HXXXfhxRdfRFJSUriHExZaWlrw0ksvoby8HAkJCeEeTkhpb29HRkZGuIdBHKC3txf79u3DjTfe6P0sLi4ON954I955550wjoyEgvb2dgAYVL/n/v5+vPLKK+jq6sLMmTODui+KmihAkiTccccduPvuuzFt2rRwDyfkfP/730dycjIyMzNx8uRJbNmyJdxDCim1tbWoqKjAd77znXAPhTjA2bNn0d/fjyuuuMLn8yuuuAKnT58O06hIKBgYGMB3v/tdzJo1C8XFxeEeTtCpqalBSkoKEhMTcffdd+P111/HhAkTgrpPipow8tBDD8Hlchn++/DDD1FRUYFz585h1apV4R6yI4get8x//dd/4cCBA3jzzTcRHx+PxYsXQ4rCQthWjxsATp06hS984Qu47bbbcNddd4Vp5IFh57gJiUWWL1+OQ4cO4ZVXXgn3UELC1VdfjYMHD2LPnj245557sGTJErz//vtB3SfbJISRpqYmNDc3Gy5TWFiIr33ta/jTn/4El8vl/by/vx/x8fG4/fbb8cILLwR7qI4ietxDhw71+/zjjz9Gbm4udu3aFXQzptNYPe7GxkbMnTsXM2bMwPPPP4+4uOh8B7FzvZ9//nl897vfRVtbW5BHF3p6e3uRlJSEP/zhD1iwYIH38yVLlqCtrW3QWCJdLhdef/11n3MQy9x3333YsmULtm/fjoKCgnAPJyzceOONGDt2LH71q18FbR9DgrZlYkp2djays7NNl/v5z3+OJ554wvt3Y2MjPv/5z+N3v/sdpk+fHswhBgXR49ZiYGAAgCe1PdqwctynTp3CvHnzMHXqVGzYsCFqBQ0Q2PWORYYOHYqpU6fin//8p3dCHxgYwD//+U/cd9994R0ccRxJkrBixQq8/vrr2Lp166AVNIDnPg/2s5uiJgoYM2aMz98pKSkAgLFjx2L06NHhGFJI2LNnD6qrqzF79my43W589NFH+O///m+MHTs26qw0Vjh16hTmzp2LvLw8rFmzBk1NTd7vrrzyyjCOLPicPHkSLS0tOHnyJPr7+721mMaNG+e972OBBx54AEuWLMG0adNQVlaGn/3sZ+jq6sLSpUvDPbSg0tnZidraWu/fx48fx8GDB5GRkeH3nIsVli9fjpdffhlbtmzBiBEjvHFTaWlpGD58eJhHFzxWrVqFm266CWPGjMG5c+fw8ssvY+vWrfjHP/4R3B0HNbeKBIXjx48PipTu9957T5o3b56UkZEhJSYmSvn5+dLdd98tffzxx+EeWlDZsGGDBEDzX6yzZMkSzeOurKwM99Acp6KiQhozZow0dOhQqaysTNq9e3e4hxR0KisrNa/vkiVLwj20oKH3W96wYUO4hxZUvv3tb0t5eXnS0KFDpezsbOmzn/2s9OabbwZ9v4ypIYQQQkhMEL2OekIIIYQQBRQ1hBBCCIkJKGoIIYQQEhNQ1BBCCCEkJqCoIYQQQkhMQFFDCCGEkJiAooYQQgghMQFFDSGEEEJiAooaQgghhMQEFDWEkKjnnXfeQXx8PG6++eZwD4UQEkbYJoEQEvXceeedSElJwfr163HkyBHk5OSEe0iEkDBASw0hJKrp7OzE7373O9xzzz24+eab8fzzz4d7SISQMEFRQwiJan7/+9/jmmuuwdVXX41vfvObeO6550ADNCGDE4oaQkhUs379enzzm98EAHzhC19Ae3s7tm3bFuZREULCAWNqCCFRy5EjR1BcXIxTp05h5MiRAID77rsP7e3tePHFF8M8OkJIqBkS7gEQQohd1q9fj4sXL/oEBkuShMTERPziF79AWlpaGEdHCAk1dD8RQqKSixcvYuPGjVi7di0OHjzo/ffuu+8iJycHmzZtCvcQCSEhhu4nQkhUsnnzZnz961/HmTNn/Cwy3//+9/H222+juro6TKMjhIQDihpCSFTy5S9/GQMDA/jLX/7i911VVRWmT5+Od999F5MmTQrD6Agh4YCihhBCCCExAWNqCCGEEBITUNQQQgghJCagqCGEEEJITEBRQwghhJCYgKKGEEIIITEBRQ0hhBBCYgKKGkIIIYTEBBQ1hBBCCIkJKGoIIYQQEhNQ1BBCCCEkJqCoIYQQQkhM8P8DXpcX4TDUP8AAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df4 = pd.DataFrame(np.random.randn(1000, 4), columns=list('ABCD'))\n",
    "df4.plot.scatter(x='A', y='B')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: xlabel='B', ylabel='D'>"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 同时显示A和C的关系，B和D的关系\n",
    "# 返回值是试图\n",
    "ax = df4.plot.scatter(x='A', y='C', color='DarkBlue', label='Group1')\n",
    "\n",
    "df4.plot.scatter(x='B', y='D', color='DarkGreen',\n",
    "                 alpha=0.5,\n",
    "                #  s=np.random.randint(30, 100, size=100),\n",
    "                 label='Group2',\n",
    "                 ax=ax)  # ax表示向子视图中进行绘制\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 面积图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df5 = pd.DataFrame(np.random.rand(10, 4), columns=list('ABCD'))\n",
    "df5.plot.area(stacked=True)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 箱式图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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/GTkcrnUpZQ926J42BbFw7YoLuW2PYp6sCoAMLnpEQEAkhFEAIBkBBEAIBlBBABIRhDJ2MsvvxxVVVXxB3/wB6lLKWv33ntvVFRUjE2XXnpprFixIn7xi1+kLq0sHT58ONasWROLFi2KXC4XTU1Ncfvtt8czzzyTurSy8dbvxNSpU+Pyyy+P973vffHkk0/G8PBw6vLK0q/vp0anFStWpC4tU4JIxjZv3hxr1qyJF154IQ4ePJi6nLK2YsWKOHToUBw6dCieeeaZmDJlSrS3t6cuq+zs27cvli5dGs8++2z8/d//fbzyyiuxbdu2aGtri9WrV6cur6yMfif27dsX3//+96OtrS0+9rGPRXt7e5w+fTp1eWXprfup0emrX/1q6rIyVdS3eC91/f390dnZGT/5yU/i8OHDsWXLlnjooYdSl1W2crlczJ49OyIiZs+eHevXr49bbrklenp6oqGhIXF15ePP//zPo6KiIrZv3x61tbVj77/rXe+KP/mTP0lYWfl563di3rx58Tu/8ztx4403xnve857YsmVLfOQjH0lcYfl56zYpF3pEMvT1r389rrrqqrjyyivjrrvuiieffHJcj0Qme/39/fGv//qv0draGpdeemnqcsrGm2++Gdu2bYvVq1efEUJGveMd7yh8UZzh93//9+Paa6+NrVu3pi6FMiGIZGjz5s1x1113RcSvutt6e3vj+eefT1xV+erq6oq6urqoq6uL6dOnx3e/+93o7Oz8jU+G5OLp7u6OkZGRuOqqq1KXwgVcddVVsW/fvtRllKW37qdGp09/+tOpy8qUUzMZ2b17d2zfvj2+/e1vR0TElClTYtWqVbF58+ZYvnx52uLKVFtbWzz++OMREXH06NH4p3/6p7jtttti+/btsWDBgsTVlQc9gqVhZGQkKioqUpdRlt66nxo1a9asRNUUhiCSkc2bN8fp06dj7ty5Y++NjIxELpeLz372s+N+PDIXT21tbbS2to69/ud//ueor6+PL3zhC/G3f/u3CSsrH+985zujoqIidu3alboULuCXv/xlNDc3py6jLP36fqoc6JPOwOnTp+NLX/pSPPLII7Fjx46x6ec//3nMnTt30o+ALhUVFRVRWVkZx48fT11K2Zg1a1bceuut8dhjj8XAwMBZn//P//xP4YviDM8++2y88sorcccdd6QuhTKhRyQDXV1dcfTo0bjvvvvO6vm44447YvPmzfGnf/qniaorX4ODg3H48OGI+NWpmc9+9rPR398ft99+e+LKystjjz0WN998c1x//fXxN3/zN3HNNdfE6dOn4+mnn47HH388fvnLX6YusWyMfieGhobi9ddfj23btkVHR0e0t7fH3Xffnbq8svTW/dSoKVOmxGWXXZaoouwJIhnYvHlzvPe97z3n6Zc77rgj/u7v/i5+8YtfxDXXXJOguvK1bdu2mDNnTkRETJ8+Pa666qr4xje+YcxOgS1atCj+4z/+Ix5++OFYt25dHDp0KBoaGmLp0qVnnRsnW6PfiSlTpsTMmTPj2muvjc985jNxzz33GMSdyFv3U6OuvPLKSX06s2LE6DEAIBGRFwBIRhABAJIRRACAZAQRACAZQQQASEYQAQCSEUQAgGQEEQAgGUEEAEhGEAEAkhFEAIBkBBEAIJn/BZUylkx6zJorAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df6 = pd.DataFrame(np.random.randn(20, 5), columns=list('ABCDE'))\n",
    "df6.plot.box()  # 表示数据分布情况，绿色线表示中位数，上四分之一，下四分之一"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 直方图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: ylabel='Frequency'>"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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3vFVWQAAwEQCYoIyAACAvxB2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqRF2AACAqXkVdr799ltf1wEAAOAXXoWdPn366Oqrr9ZLL72kEydO+LomAAAAn/Eq7Hz22WcaNGiQsrOzZbPZ9G//9m/auXOnr2sDAABoNq/CzuDBg/XMM8+otLRUL774osrKyjRixAgNHDhQixYtUmVlpa/rBAAA8EqzJii3a9dOEydO1Nq1a/X444/rwIEDuvvuu5WQkKCpU6eqrKzMV3UCAAB4pVlh59NPP9Wf//xnxcXFadGiRbr77rt18OBBbdmyRaWlpZowYYKv6gQAAPBKO28+tGjRIq1cuVLFxcUaN26cVq9erXHjxiko6Nfs1KtXL+Xl5alnz56+rBUAAOC8eRV2li1bpltvvVXTpk1TXFzcadvExMRoxYoVzSoOAACgubwKO998880ftgkNDVVGRoY3hwcAAPAZr+bsrFy5UmvXrj1l+9q1a7Vq1apmFwUAAOArXoWd3NxcdenS5ZTtMTExevTRR5tdFAAAgK94FXZKSkrUq1evU7b36NFDJSUlzS4KAADAV7wKOzExMdqzZ88p2z///HN17ty52UUBAAD4ildh5+abb9a///u/a8eOHWpsbFRjY6O2b9+uO++8UzfddJOvawQAAPCaV3djPfTQQzp06JBGjRqldu1+PURTU5OmTp3KnB0AABBQvAo7oaGheuWVV/TQQw/p888/V4cOHZSUlKQePXr4uj4AAIBm8SrsnHTRRRfpoosu8lUtAAAAPudV2GlsbFReXp62bdumiooKNTU1eezfvn27T4oDAABoLq/Czp133qm8vDylpaVp4MCBslgsvq4LAADAJ7wKO2vWrNGrr76qcePGNavz3NxcrVu3Tvv371eHDh30T//0T3r88cfVr18/d5sTJ07orrvu0po1a1RbW6vU1FQ9//zzio2NdbcpKSnRzJkztWPHDnXq1EkZGRnKzc11T54GAABtl1e3noeGhqpPnz7N7rygoEBZWVn66KOPtGXLFtXX12v06NGqqalxt5kzZ47efvttrV27VgUFBSotLdXEiRPd+xsbG5WWlqa6ujp9+OGHWrVqlfLy8nTfffc1uz4AAND6WVwul+t8P/TUU0/p22+/1ZIlS3x6CauyslIxMTEqKCjQVVddpaqqKnXt2lX5+fm64YYbJEn79+/XxRdfrMLCQg0fPlwbN27Utddeq9LSUvdoz/LlyzV37lxVVlYqNDT0D/t1Op2KjIxUVVWVrFarz84HLafnvA1Gl9BmHGo/yegS2oSkXt2NLqFN2Jux1+gS0Azn+vvt1XWeDz74QDt27NDGjRs1YMAAhYSEeOxft26dN4dVVVWVJCk6OlqStGvXLtXX1yslJcXdpn///urevbs77BQWFiopKcnjslZqaqpmzpypffv26dJLLz2ln9raWtXW1rrXnU6nV/UCAIDA51XYiYqK0vXXX+/TQpqamjR79mxdccUVGjhwoCTJ4XAoNDRUUVFRHm1jY2PlcDjcbX4bdE7uP7nvdHJzc7VgwQKf1g8AAAKTV2Fn5cqVvq5DWVlZ+uKLL/TBBx/4/Ni/l5OTo+zsbPe60+lUQkKC3/sFAAAtz6sJypLU0NCgrVu36oUXXtDx48clSaWlpaqurj7vY82aNUvr16/Xjh071K1bN/d2m82muro6HTt2zKN9eXm5bDabu015efkp+0/uO52wsDBZrVaPBQAAmJNXYef7779XUlKSJkyYoKysLFVWVkqSHn/8cd19993nfByXy6VZs2bpjTfe0Pbt29WrVy+P/UOGDFFISIi2bdvm3lZcXKySkhLZ7XZJkt1u1969e1VRUeFus2XLFlmtViUmJnpzegAAwES8Cjt33nmnhg4dqp9++kkdOnRwb7/++us9gskfycrK0ksvvaT8/HxFRETI4XDI4XDol19+kSRFRkYqMzNT2dnZ2rFjh3bt2qXp06fLbrdr+PDhkqTRo0crMTFRt9xyiz7//HNt3rxZ8+fPV1ZWlsLCwrw5PQAAYCJezdn529/+pg8//PCU27p79uypH3/88ZyPs2zZMknSyJEjPbavXLlS06ZNkyQ9/fTTCgoKUnp6usdDBU8KDg7W+vXrNXPmTNntdnXs2FEZGRl68MEHvTk1AABgMl6FnaamJjU2Np6y/YcfflBERMQ5H+dcHvHTvn17LV26VEuXLj1jmx49euidd945534BAEDb4dVlrNGjR2vx4sXudYvFourqat1///3NfoUEAACAL3k1svPUU08pNTVViYmJOnHihCZNmqRvvvlGXbp00V//+ldf1wgAAOA1r8JOt27d9Pnnn2vNmjXas2ePqqurlZmZqcmTJ3tMWAYAADCa168Fb9eunaZMmeLLWgAAAHzOq7CzevXqs+6fOnWqV8UAAAD4mldh58477/RYr6+v188//6zQ0FCFh4cTdgAAQMDw6m6sn376yWOprq5WcXGxRowYwQRlAAAQULx+N9bv9e3bV4899tgpoz4AAABG8lnYkX6dtFxaWurLQwIAADSLV3N2/u///s9j3eVyqaysTEuWLNEVV1zhk8IAAAB8wauwc91113msWywWde3aVddcc42eeuopX9QFAADgE16/GwsAAKA18OmcHQAAgEDj1chOdnb2ObddtGiRN10AAAD4hFdhZ/fu3dq9e7fq6+vVr18/SdLXX3+t4OBgXXbZZe52FovFN1UCAAB4yauwM378eEVERGjVqlW64IILJP36oMHp06fryiuv1F133eXTIgEAALzl1Zydp556Srm5ue6gI0kXXHCBHn74Ye7GAgAAAcWrsON0OlVZWXnK9srKSh0/frzZRQEAAPiKV2Hn+uuv1/Tp07Vu3Tr98MMP+uGHH/T6668rMzNTEydO9HWNAAAAXvNqzs7y5ct19913a9KkSaqvr//1QO3aKTMzU0888YRPCwQAAGgOr8JOeHi4nn/+eT3xxBM6ePCgJKl3797q2LGjT4sDAABormY9VLCsrExlZWXq27evOnbsKJfL5au6AAAAfMKrsHPkyBGNGjVKF110kcaNG6eysjJJUmZmJredAwCAgOJV2JkzZ45CQkJUUlKi8PBw9/Ybb7xRmzZt8llxAAAAzeXVnJ13331XmzdvVrdu3Ty29+3bV99//71PCgMAAPAFr0Z2ampqPEZ0Tjp69KjCwsKaXRQAAICveBV2rrzySq1evdq9brFY1NTUpIULF+rqq6/2WXEAAADN5dVlrIULF2rUqFH69NNPVVdXp3vvvVf79u3T0aNH9fe//93XNQIAAHjNq5GdgQMH6uuvv9aIESM0YcIE1dTUaOLEidq9e7d69+7t6xoBAAC8dt4jO/X19RozZoyWL1+u//iP//BHTQAAAD5z3iM7ISEh2rNnjz9qAQAA8DmvLmNNmTJFK1as8HUtAAAAPufVBOWGhga9+OKL2rp1q4YMGXLKO7EWLVrkk+IAMzvUfpLRJQBAm3BeYefbb79Vz5499cUXX+iyyy6TJH399dcebSwWi++qgyF6zttgdAkAAPjMeYWdvn37qqysTDt27JD06+shnn32WcXGxvqlOAAAgOY6rzk7v3+r+caNG1VTU+PTggAAAHzJqzk7J/0+/ABAIErq1d3oEgAY6LxGdiwWyylzcpozR+f999/X+PHjFR8fL4vFojfffNNj/7Rp09x9nlzGjBnj0ebo0aOaPHmyrFaroqKilJmZqerqaq9rAgAA5nJeIzsul0vTpk1zv+zzxIkTuv3220+5G2vdunXndLyamhpdcskluvXWWzVx4sTTthkzZoxWrlzpXv/9i0YnT56ssrIybdmyRfX19Zo+fbpuu+025efnn8+pAQAAkzqvsJORkeGxPmXKlGZ1PnbsWI0dO/asbcLCwmSz2U6776uvvtKmTZv0ySefaOjQoZKk5557TuPGjdOTTz6p+Pj4ZtUHAABav/MKO78dYWkp7733nmJiYnTBBRfommuu0cMPP6zOnTtLkgoLCxUVFeUOOpKUkpKioKAgffzxx7r++utPe8za2lrV1ta6151Op39PAgAAGMarJyi3lDFjxmj16tXatm2bHn/8cRUUFGjs2LFqbGyUJDkcDsXExHh8pl27doqOjpbD4TjjcXNzcxUZGeleEhIS/HoeAADAOM26G8vfbrrpJvffSUlJGjRokHr37q333ntPo0aN8vq4OTk5ys7Odq87nU4CDwAAJhXQIzu/d+GFF6pLly46cOCAJMlms6miosKjTUNDg44ePXrGeT7Sr/OArFarxwIAAMypVYWdH374QUeOHFFcXJwkyW6369ixY9q1a5e7zfbt29XU1KTk5GSjygQAAAHE0MtY1dXV7lEaSfruu+9UVFSk6OhoRUdHa8GCBUpPT5fNZtPBgwd17733qk+fPkpNTZUkXXzxxRozZoxmzJih5cuXq76+XrNmzdJNN93EnVgAAECSwSM7n376qS699FJdeumlkqTs7Gxdeumluu+++xQcHKw9e/bon//5n3XRRRcpMzNTQ4YM0d/+9jePZ+28/PLL6t+/v0aNGqVx48ZpxIgR+q//+i+jTgkAAAQYQ0d2Ro4cedZXTmzevPkPjxEdHc0DBAEAwBm1qjk7AAAA54uwAwAATI2wAwAATI2wAwAATI2wAwAATI2wAwAATC2g340FAIA/Ja1KMrqE87Y3Y6/RJbQ6jOwAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTI+wAAABTMzTsvP/++xo/frzi4+NlsVj05ptveux3uVy67777FBcXpw4dOiglJUXffPONR5ujR49q8uTJslqtioqKUmZmpqqrq1vwLAAAQCAzNOzU1NTokksu0dKlS0+7f+HChXr22We1fPlyffzxx+rYsaNSU1N14sQJd5vJkydr37592rJli9avX6/3339ft912W0udAgAACHDtjOx87NixGjt27Gn3uVwuLV68WPPnz9eECRMkSatXr1ZsbKzefPNN3XTTTfrqq6+0adMmffLJJxo6dKgk6bnnntO4ceP05JNPKj4+vsXOBQAABKaAnbPz3XffyeFwKCUlxb0tMjJSycnJKiwslCQVFhYqKirKHXQkKSUlRUFBQfr444/PeOza2lo5nU6PBQAAmFPAhh2HwyFJio2N9dgeGxvr3udwOBQTE+Oxv127doqOjna3OZ3c3FxFRka6l4SEBB9XDwAAAkXAhh1/ysnJUVVVlXs5fPiw0SUBAAA/CdiwY7PZJEnl5eUe28vLy937bDabKioqPPY3NDTo6NGj7janExYWJqvV6rEAAABzCtiw06tXL9lsNm3bts29zel06uOPP5bdbpck2e12HTt2TLt27XK32b59u5qampScnNziNQMAgMBj6N1Y1dXVOnDggHv9u+++U1FRkaKjo9W9e3fNnj1bDz/8sPr27atevXrpP//zPxUfH6/rrrtOknTxxRdrzJgxmjFjhpYvX676+nrNmjVLN910E3diAQAASQaHnU8//VRXX321ez07O1uSlJGRoby8PN17772qqanRbbfdpmPHjmnEiBHatGmT2rdv7/7Myy+/rFmzZmnUqFEKCgpSenq6nn322RY/FwAAEJgsLpfLZXQRRnM6nYqMjFRVVRXzdyT1nLfB6BLahEPtJxldQpuR1Ku70SUAPrM3Y6/RJQSMc/39Dtg5OwAAAL5A2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKZG2AEAAKYW0GHngQcekMVi8Vj69+/v3n/ixAllZWWpc+fO6tSpk9LT01VeXm5gxQAAINAEdNiRpAEDBqisrMy9fPDBB+59c+bM0dtvv621a9eqoKBApaWlmjhxooHVAgCAQNPO6AL+SLt27WSz2U7ZXlVVpRUrVig/P1/XXHONJGnlypW6+OKL9dFHH2n48OEtXSoAAAhAAT+y88033yg+Pl4XXnihJk+erJKSEknSrl27VF9fr5SUFHfb/v37q3v37iosLDSqXAAAEGACemQnOTlZeXl56tevn8rKyrRgwQJdeeWV+uKLL+RwOBQaGqqoqCiPz8TGxsrhcJz1uLW1taqtrXWvO51Of5QPAAACQECHnbFjx7r/HjRokJKTk9WjRw+9+uqr6tChg9fHzc3N1YIFC3xRIgAACHABfxnrt6KionTRRRfpwIEDstlsqqur07FjxzzalJeXn3aOz2/l5OSoqqrKvRw+fNiPVQMAACO1qrBTXV2tgwcPKi4uTkOGDFFISIi2bdvm3l9cXKySkhLZ7fazHicsLExWq9VjAQAA5hTQl7HuvvtujR8/Xj169FBpaanuv/9+BQcH6+abb1ZkZKQyMzOVnZ2t6OhoWa1W3XHHHbLb7dyJBQAA3AI67Pzwww+6+eabdeTIEXXt2lUjRozQRx99pK5du0qSnn76aQUFBSk9PV21tbVKTU3V888/b3DVAAAgkAR02FmzZs1Z97dv315Lly7V0qVLW6giAADQ2rSqOTsAAADni7ADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMLaCfs2MGPedtMLoEAADaNEZ2AACAqTGyA1M41H6S0SUAAAIUYQfAeUnq1d3oEgDgvHAZCwAAmBphBwAAmBphBwAAmBphBwAAmBphBwAAmBp3YwEA0IokrUoyuoTztjdjr6H9M7IDAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMjbADAABMzTRhZ+nSperZs6fat2+v5ORk7dy50+iSAABAAGhndAG+8Morryg7O1vLly9XcnKyFi9erNTUVBUXFysmJsbo8lqdQ+0nGV0CAAA+Y4qws2jRIs2YMUPTp0+XJC1fvlwbNmzQiy++qHnz5hlcHXB6Sb26G10CALQJrT7s1NXVadeuXcrJyXFvCwoKUkpKigoLC0/7mdraWtXW1rrXq6qqJElOp9Pn9TXV/uzzY/qb0+IyuoTzNrxHN6NLOH+/NBpdAQC0CH/8vv72uC7X2X+3Wn3Y+cc//qHGxkbFxsZ6bI+NjdX+/ftP+5nc3FwtWLDglO0JCQl+qbG1iTS6AK98ZXQBAIAziJzp31+W48ePKzLyzH20+rDjjZycHGVnZ7vXm5qadPToUXXu3FkWi8XAyvzH6XQqISFBhw8fltVqNbqcNoHvvGXxfbc8vvOWxfd9KpfLpePHjys+Pv6s7Vp92OnSpYuCg4NVXl7usb28vFw2m+20nwkLC1NYWJjHtqioKH+VGFCsViv/I2lhfOcti++75fGdtyy+b09nG9E5qdXfeh4aGqohQ4Zo27Zt7m1NTU3atm2b7Ha7gZUBAIBA0OpHdiQpOztbGRkZGjp0qC6//HItXrxYNTU17ruzAABA22WKsHPjjTeqsrJS9913nxwOhwYPHqxNmzadMmm5LQsLC9P9999/yuU7+A/fecvi+255fOcti+/bexbXH92vBQAA0Iq1+jk7AAAAZ0PYAQAApkbYAQAApkbYAQAApkbYaeNqa2s1ePBgWSwWFRUVGV2OKR06dEiZmZnq1auXOnTooN69e+v+++9XXV2d0aWZytKlS9WzZ0+1b99eycnJ2rlzp9ElmVJubq6GDRumiIgIxcTE6LrrrlNxcbHRZbUZjz32mCwWi2bPnm10Ka0KYaeNu/fee//wMdtonv3796upqUkvvPCC9u3bp6efflrLly/XX/7yF6NLM41XXnlF2dnZuv/++/XZZ5/pkksuUWpqqioqKowuzXQKCgqUlZWljz76SFu2bFF9fb1Gjx6tmpoao0szvU8++UQvvPCCBg0aZHQprQ63nrdhGzduVHZ2tl5//XUNGDBAu3fv1uDBg40uq0144okntGzZMn377bdGl2IKycnJGjZsmJYsWSLp16eoJyQk6I477tC8efMMrs7cKisrFRMTo4KCAl111VVGl2Na1dXVuuyyy/T888/r4Ycf1uDBg7V48WKjy2o1GNlpo8rLyzVjxgz97//+r8LDw40up82pqqpSdHS00WWYQl1dnXbt2qWUlBT3tqCgIKWkpKiwsNDAytqGqqoqSeK/Zz/LyspSWlqax3/nOHemeIIyzo/L5dK0adN0++23a+jQoTp06JDRJbUpBw4c0HPPPacnn3zS6FJM4R//+IcaGxtPeWJ6bGys9u/fb1BVbUNTU5Nmz56tK664QgMHDjS6HNNas2aNPvvsM33yySdGl9JqMbJjIvPmzZPFYjnrsn//fj333HM6fvy4cnJyjC65VTvX7/u3fvzxR40ZM0b/8i//ohkzZhhUOeAbWVlZ+uKLL7RmzRqjSzGtw4cP684779TLL7+s9u3bG11Oq8WcHROprKzUkSNHztrmwgsv1L/+67/q7bfflsVicW9vbGxUcHCwJk+erFWrVvm7VFM41+87NDRUklRaWqqRI0dq+PDhysvLU1AQ/9bwhbq6OoWHh+u1117Tdddd596ekZGhY8eO6a233jKuOBObNWuW3nrrLb3//vvq1auX0eWY1ptvvqnrr79ewcHB7m2NjY2yWCwKCgpSbW2txz6cHmGnDSopKZHT6XSvl5aWKjU1Va+99pqSk5PVrVs3A6szpx9//FFXX321hgwZopdeeon/c/Kx5ORkXX755Xruueck/Xp5pXv37po1axYTlH3M5XLpjjvu0BtvvKH33ntPffv2NbokUzt+/Li+//57j23Tp09X//79NXfuXC4fniPm7LRB3bt391jv1KmTJKl3794EHT/48ccfNXLkSPXo0UNPPvmkKisr3ftsNpuBlZlHdna2MjIyNHToUF1++eVavHixampqNH36dKNLM52srCzl5+frrbfeUkREhBwOhyQpMjJSHTp0MLg684mIiDgl0HTs2FGdO3cm6JwHwg7gZ1u2bNGBAwd04MCBU8IkA6u+ceONN6qyslL33XefHA6HBg8erE2bNp0yaRnNt2zZMknSyJEjPbavXLlS06ZNa/mCgHPAZSwAAGBqzJAEAACmRtgBAACmRtgBAACmRtgBAACmRtgBAACmRtgBAACmRtgBAACmRtgBAACmRtgBAACmRtgBAACmRtgBAACmRtgBAACm9v+jpBzY45AMpQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAGdCAYAAAD0e7I1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAApnUlEQVR4nO3de3BUZYL//0/nCglJhyBJkyJcRpAYAbNy7fJSIBkCREsk7qgDEpiss0JggXjBzLIyXuOAAiIErFkksIoo423FBUVkYHeIgkEQcUBQIEjSSWaAhMQh1/794Y/+TgZE0unukzy8X1VdZZ9zup/P6dLJZ55+zmmb2+12CwAAwFBBVgcAAADwJ8oOAAAwGmUHAAAYjbIDAACMRtkBAABGo+wAAACjUXYAAIDRKDsAAMBoIVYHaAuamppUUlKiqKgo2Ww2q+MAAIDL4Ha7dfbsWSUkJCgo6Mfnbyg7kkpKSpSYmGh1DAAA4IUTJ06oe/fuP7qfsiMpKipK0g8fVnR0tMVpAADA5aiqqlJiYqLn7/iPoexInq+uoqOjKTsAALQzP7UEhQXKAADAaJQdAABgNEvLzm9/+1vZbLZmj6SkJM/+c+fOKTs7W126dFGnTp2UkZGhsrKyZu9RXFys9PR0RUREKC4uTg8//LAaGhoCfSoAAKCNsnzNznXXXaePPvrI8zwk5P9FmjNnjt5//31t2LBBdrtdM2bM0IQJE/SnP/1JktTY2Kj09HQ5HA7t3LlTpaWlmjx5skJDQ/XMM88E/FwAAAgUt9uthoYGNTY2Wh3Fb4KDgxUSEtLq28JYXnZCQkLkcDgu2F5ZWalVq1Zp3bp1uvXWWyVJq1ev1rXXXqtPPvlEw4cP14cffqivvvpKH330keLj45WSkqInn3xSc+fO1W9/+1uFhYUF+nQAAPC7uro6lZaW6vvvv7c6it9FRESoW7durfqbbnnZOXz4sBISEtShQwc5nU7l5eWpR48eKioqUn19vVJTUz3HJiUlqUePHiosLNTw4cNVWFioAQMGKD4+3nNMWlqapk2bpgMHDuif/umfLjpmbW2tamtrPc+rqqr8d4IAAPhQU1OTjh49quDgYCUkJCgsLMzIG+K63W7V1dWpoqJCR48eVd++fS9548BLsbTsDBs2TAUFBerXr59KS0v1+OOP6+abb9aXX34pl8ulsLAwxcTENHtNfHy8XC6XJMnlcjUrOuf3n9/3Y/Ly8vT444/79mQAAAiAuro6NTU1KTExUREREVbH8auOHTsqNDRUx48fV11dnTp06ODV+1hadsaOHev554EDB2rYsGHq2bOn3njjDXXs2NFv4+bm5ionJ8fz/PxNiQAAaC+8neVob3xxnm3qk4qJidE111yjI0eOyOFwqK6uTmfOnGl2TFlZmWeNj8PhuODqrPPPL7YO6Lzw8HDPDQS5kSAAAGZrU2Wnurpa33zzjbp166ZBgwYpNDRUW7du9ew/dOiQiouL5XQ6JUlOp1P79+9XeXm555gtW7YoOjpaycnJAc8PAADaHku/xnrooYd0++23q2fPniopKdH8+fMVHByse++9V3a7XVlZWcrJyVFsbKyio6M1c+ZMOZ1ODR8+XJI0evRoJScn67777tOCBQvkcrk0b948ZWdnKzw83MpTAwAg4BZv+TpgY835+TUBG6u1LJ3Z+e6773TvvfeqX79++sUvfqEuXbrok08+UdeuXSVJixcv1m233aaMjAzdcsstcjgceuuttzyvDw4O1saNGxUcHCyn06lJkyZp8uTJeuKJJ6w6JQAA8BMKCwsVHBys9PT0gIxnc7vd7oCM1IZVVVXJbrersrKS9TsAgDbt3LlzOnr0qHr37n3B1UntZWbnX/7lX9SpUyetWrVKhw4dUkJCwo8ee6nzvdy/321qzQ4AADBbdXW1Xn/9dU2bNk3p6ekqKCjw+5iW31QQAPwtf2++1RFabHrKdKsjAH7xxhtvKCkpSf369dOkSZM0e/Zs5ebm+vXGiMzsAACAgFm1apUmTZokSRozZowqKyu1fft2v47JzA6AFmmPsyQA2oZDhw5p165devvttyX98PuYd999t1atWqURI0b4bVzKDgAACIhVq1apoaGh2YJkt9ut8PBwLVu2THa73S/j8jUWAADwu4aGBq1du1bPP/+89u7d63ns27dPCQkJeu211/w2NjM7AADA7zZu3KjTp08rKyvrghmcjIwMrVq1Sg888IBfxqbsAABgiLZ8V+NVq1YpNTX1ol9VZWRkaMGCBfriiy80cOBAn49N2QEswkJfAFeS995770f3DR06VP68xzFlB7DI9NOVVkfwSn5n/ywgBAB/YYEyAAAwGmUHAAAYjbIDAACMRtkBAABGo+wAAACjUXYAAIDRuPQcANqg9ngf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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 表示概率分布\n",
    "df7 = pd.DataFrame(data={'A': np.random.randn(1000)-2,\n",
    "                         'B': np.random.randn(1000),\n",
    "                         'C': np.random.randn(1000)+2})\n",
    "df7.plot.hist()\n",
    "df7.plot.hist(stacked=True, alpha=0.5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[<Axes: title={'center': 'A'}>, <Axes: title={'center': 'B'}>],\n",
       "       [<Axes: title={'center': 'C'}>, <Axes: >]], dtype=object)"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAvEAAAL3CAYAAAADYRr8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABUk0lEQVR4nO3df3QUdZ7v/1d30ukkmB8TNAm5BIg4Ciw/L4GQkesGCQk/Voch44iDil4WRk7CXcyOCn4VCKjxMs7oyo0yc44DM3eJuu4VWIHBtDiQcQ0IcTguqBzDxcModEA4pElYmybd3z8c+tomQDrppPqTPB/n5KSr6lNV7/pQ3fWiulJlCwQCAQEAAAAwht3qAgAAAACEhxAPAAAAGIYQDwAAABiGEA8AAAAYhhAPAAAAGIYQDwAAABiGEA8AAAAYhhAPAAAAGIYQDwAAABiGEA8AAAAYhhAPfMtLL70km82mvLw8q0sBAESRjRs3ymazhfykp6drypQp+sMf/mB1eeiDYq0uAIgmmzZt0pAhQ/TBBx+ooaFBN910k9UlAQCiyOrVq5WTk6NAIKDGxkZt3LhRM2fO1FtvvaW/+7u/s7o89CGciQf+6tixY3r//ff1q1/9SjfccIM2bdpkdUkAgCgzY8YM3Xvvvbrvvvv085//XH/605/kcDj06quvWl0a+hhCPPBXmzZt0ve+9z3NmjVLP/7xjwnxAIBrSk1NVUJCgmJjubgBPYsQD/zVpk2bNGfOHMXFxemee+7RZ599pv3791tdFgAgijQ1Nemrr77S6dOndfjwYS1evFjNzc269957rS4NfQz/bQQk1dfX69NPP9W6deskSZMnT9bAgQO1adMmTZgwweLqAADRorCwMGTY6XTqt7/9raZNm2ZRReirCPGAvjkLn5GRoSlTpkiSbDab7r77bv3zP/+zfvnLXyomJsbiCgEA0aCqqko333yzJKmxsVH//M//rL//+79XUlKS5syZY3F16EtsgUAgYHURgJVaW1uVnZ2tv/3bv9WaNWuC4//85z/rJz/5id5++20VFRVZWCEAwGobN27Ugw8+qP379ys3Nzc43u/3a9y4cTp9+rQ+//xzxcXFWVgl+hKuiUef9+677+rkyZN67bXX9P3vfz/485Of/ESS+ANXAMAV2e12TZkyRSdPntRnn31mdTnoQ7icBn3epk2blJ6erqqqqjbT3nzzTW3evFnr169XQkKCBdUBAKLdpUuXJEnNzc0WV4K+hBCPPu0///M/9eabb+quu+7Sj3/84zbTs7Ky9Oqrr+rf/u3fdPfdd1tQIQAgmvl8PtXU1CguLk7Dhw+3uhz0IYR49Gn/9m//pvPnz+vOO+9sd/qkSZOCD34ixAMA/vCHP+jTTz+VJJ06dUrV1dX67LPPtGzZMiUnJ1tcHfoSQjz6tE2bNik+Pv6Ktwaz2+2aNWuWNm3apDNnzqh///49XCEAIJqsWLEi+Do+Pl7Dhg3Tyy+/rJ/97GcWVoW+iLvTAAAAAIbh7jQAAACAYQjxAAAAgGEI8QAAAIBhCPEAAACAYQjxAAAAgGEI8QAAAIBhjLxPvN/v14kTJ5SUlCSbzWZ1OQDQIYFAQOfPn1dWVpbsds6hdCeOEwBM1dFjhZEh/sSJE8rOzra6DADolL/85S8aOHCg1WX0ahwnAJjuWscKI0N8UlKSpG82LiEhQTU1NSoqKpLD4bC4so7x+XzU3ENMrJuae4YVNXs8HmVnZwc/w9B9TD9ORBMT39/Rhj7sur7Uhx09VhgZ4i9/NZqcnKyEhAQlJiYqOTnZmH9Un89HzT3ExLqpuWdYWTOXd3Q/048T0cTE93e0oQ+7ri/24bWOFVyUCQAAABiGEA8AAAAYhhAPAAAAGIYQDwAAABiGEA8AAAAYhhAPAAAAGIYQDwAAABiGEA8AAAAYhhAPAAAAGIYQDwAAABiGEA8AAAAYhhAPAAAAGCbW6gKAjhiybHun5nPGBLR2ojRy1dvytto6PN/nz87q1PoAAH1DOMelzh6Lvo3jEr6LM/EAAACAYQjxAAAAgGEI8QAAAIBhCPEAAACAYQjxAAAAgGEI8QAAAIBhCPEAAACAYQjxAAAAgGEI8QAAAIBhCPEAAACAYWKtLgCIRuE8TrureJQ2AAAIF2fiAQARU1lZqQkTJigpKUnp6emaPXu2jhw5EtKmoKBANpst5Oehhx4KaXP8+HHNmjVLiYmJSk9P1yOPPKJLly715KYAQFTjTDw6rSfPVgMww549e1RaWqoJEybo0qVLevzxx1VUVKSPP/5Y/fr1C7ZbuHChVq9eHRxOTEwMvm5tbdWsWbOUmZmp999/XydPntT9998vh8OhZ555pke3BwCiFSEeABAxO3fuDBneuHGj0tPTVV9fr9tuuy04PjExUZmZme0uo6amRh9//LHeeecdZWRkaOzYsVqzZo0ee+wxrVq1SnFxcd26DQBgAi6nAQB0m6amJklSWlpayPhNmzbp+uuv18iRI7V8+XJduHAhOK2urk6jRo1SRkZGcFxxcbE8Ho8OHz7cM4UDQJTjTDwAoFv4/X4tXbpUt956q0aOHBkc/9Of/lSDBw9WVlaWPvroIz322GM6cuSI3nzzTUmS2+0OCfCSgsNut7vddXm9Xnm93uCwx+ORJPl8PsXGxgZfI3yX+43+C+WMCXS8rT0Q8rsz+nr/96X9sKPbSIgHAHSL0tJSHTp0SO+9917I+EWLFgVfjxo1SgMGDNDUqVN19OhRDR06tFPrqqysVEVFRZvxNTU1wevtXS5Xp5aNb9B/odZODH+eNbn+Tq9vx44dnZ63N+kL++G3v5m8GkI8ACDiysrKtG3bNtXW1mrgwIFXbZuXlydJamho0NChQ5WZmakPPvggpE1jY6MkXfE6+uXLl6u8vDw47PF4lJ2draKiIiUkJMjlcmnatGlyOBxd2aw+yefz0X/tGLnq7Q63ddoDWpPr15MH7PL6bZ1a36FVxZ2ar7foS/vh5W8Sr4UQDwCImEAgoCVLlmjz5s3avXu3cnJyrjnPwYMHJUkDBgyQJOXn5+vpp5/WqVOnlJ6eLumbs2/JyckaMWJEu8twOp1yOp1txjscjuAB/9uvET76L5S3Nfww7vXbOjWfJPr+r/rCftjR7SPEAwAiprS0VNXV1dq6dauSkpKC17CnpKQoISFBR48eVXV1tWbOnKn+/fvro48+0sMPP6zbbrtNo0ePliQVFRVpxIgRuu+++7R27Vq53W498cQTKi0tbTeoA0BfxN1pAAAR8/LLL6upqUkFBQUaMGBA8Of111+XJMXFxemdd95RUVGRhg0bpn/8x39USUmJ3nrrreAyYmJitG3bNsXExCg/P1/33nuv7r///pD7ygNAX8eZeABAxAQCV7/7RnZ2tvbs2XPN5QwePJg/5AOAq+BMPAAAAGCYsEJ8ZWWlJkyYoKSkJKWnp2v27Nk6cuRISJuvv/5apaWl6t+/v6677jqVlJQE7ypw2fHjxzVr1iwlJiYqPT1djzzyiC5dutT1rQEAAAD6gLBC/J49e1RaWqq9e/fK5XLJ5/OpqKhILS0twTYPP/yw3nrrLb3xxhvas2ePTpw4oTlz5gSnt7a2atasWbp48aLef/99/e53v9PGjRu1YsWKyG0VAAAA0IuFdU38zp07Q4Y3btyo9PR01dfX67bbblNTU5NeeeUVVVdX6/bbb5ckbdiwQcOHD9fevXs1adIk1dTU6OOPP9Y777yjjIwMjR07VmvWrNFjjz2mVatWKS4uLnJbBwAAAPRCXfrD1qamJklSWlqaJKm+vl4+n0+FhYXBNsOGDdOgQYNUV1enSZMmqa6uTqNGjQp5pHZxcbEWL16sw4cPa9y4cW3W09sep23io4PbqzmcR05bJRKPuu5u390Pesv+Ee2sqNmk/gEARLdOh3i/36+lS5fq1ltv1ciRIyVJbrdbcXFxSk1NDWmbkZERvFew2+0OCfCXp1+e1p7e+jht02vuzCOnrdKVR113tyvdgcP0/cMUPVlzRx+lDQDAtXQ6xJeWlurQoUN67733IllPu3rb47RNfHRwezWH88hpq0TiUdfd7buP0u4t+0e0s6Lmjj5KGwCAa+lUiC8rK9O2bdtUW1urgQMHBsdnZmbq4sWLOnfuXMjZ+MbGRmVmZgbbfPDBByHLu3z3msttvqu3Pk7b9Jo7++hoK3TlUdfd7Ur7gOn7hyl6smbT+gYAEL3CujtNIBBQWVmZNm/erHfffVc5OTkh08ePHy+Hw6Fdu3YFxx05ckTHjx9Xfn6+JCk/P1//8R//oVOnTgXbuFwuJScna8SIEV3ZFgAAAKBPCOtMfGlpqaqrq7V161YlJSUFr2FPSUlRQkKCUlJStGDBApWXlystLU3JyclasmSJ8vPzNWnSJElSUVGRRowYofvuu09r166V2+3WE088odLS0nbPtgMAAAAIFVaIf/nllyVJBQUFIeM3bNigBx54QJL0/PPPy263q6SkRF6vV8XFxXrppZeCbWNiYrRt2zYtXrxY+fn56tevn+bPn6/Vq1d3bUsAAACAPiKsEB8IXPs2ffHx8aqqqlJVVdUV2wwePPiKd+QAAAAAcHVhXRMPAAAAwHqEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwsVYXAAAAgKsbsmx7j63r82dn9di60HmciQcAAAAMQ4gHAAAADEOIBwAAAAxDiAcAAAAMQ4gHAAAADEOIBwAAAAxDiAcAAAAMQ4gHAAAADEOIBwAAAAxDiAcAAAAMQ4gHAERMZWWlJkyYoKSkJKWnp2v27Nk6cuRISJuvv/5apaWl6t+/v6677jqVlJSosbExpM3x48c1a9YsJSYmKj09XY888oguXbrUk5sCAFEt1uoCAAC9x549e1RaWqoJEybo0qVLevzxx1VUVKSPP/5Y/fr1kyQ9/PDD2r59u9544w2lpKSorKxMc+bM0b//+79LklpbWzVr1ixlZmbq/fff18mTJ3X//ffL4XDomWeesXLzEMWGLNtudQlAjyLEAwAiZufOnSHDGzduVHp6uurr63XbbbepqalJr7zyiqqrq3X77bdLkjZs2KDhw4dr7969mjRpkmpqavTxxx/rnXfeUUZGhsaOHas1a9boscce06pVqxQXF2fFpgFAVOFyGgBAt2lqapIkpaWlSZLq6+vl8/lUWFgYbDNs2DANGjRIdXV1kqS6ujqNGjVKGRkZwTbFxcXyeDw6fPhwD1YPANGLM/EAgG7h9/u1dOlS3XrrrRo5cqQkye12Ky4uTqmpqSFtMzIy5Ha7g22+HeAvT788rT1er1derzc47PF4JEk+n0+xsbHB1wjf5X6L9v5zxgSsLuGKnPZAyO9oF43/1qbsh5HQ0W0kxAMAukVpaakOHTqk9957r9vXVVlZqYqKijbja2pqlJiYKElyuVzdXkdvFu39t3ai1RVc25pcv9UldMiOHTusLuGKon0/jIQLFy50qB0hHgAQcWVlZdq2bZtqa2s1cODA4PjMzExdvHhR586dCzkb39jYqMzMzGCbDz74IGR5l+9ec7nNdy1fvlzl5eXBYY/Ho+zsbBUVFSkhIUEul0vTpk2Tw+GI1Cb2GT6fz4j+G7nqbatLuCKnPaA1uX49ecAur99mdTnXdGhVsdUltGHKfhgJl79JvBZCPAAgYgKBgJYsWaLNmzdr9+7dysnJCZk+fvx4ORwO7dq1SyUlJZKkI0eO6Pjx48rPz5ck5efn6+mnn9apU6eUnp4u6Zuzb8nJyRoxYkS763U6nXI6nW3GOxyO4AH/268RvmjvP29r9Idjr99mRJ3R/O8c7fthJHR0+wjxAICIKS0tVXV1tbZu3aqkpKTgNewpKSlKSEhQSkqKFixYoPLycqWlpSk5OVlLlixRfn6+Jk2aJEkqKirSiBEjdN9992nt2rVyu9164oknVFpa2m5QB4C+iBAPAIiYl19+WZJUUFAQMn7Dhg164IEHJEnPP/+87Ha7SkpK5PV6VVxcrJdeeinYNiYmRtu2bdPixYuVn5+vfv36af78+Vq9enVPbQYARD1CPAAgYgKBa999Iz4+XlVVVaqqqrpim8GDB0f1H9cBgNW4TzwAAABgGEI8AAAAYBhCPAAAAGAYQjwAAABgGEI8AAAAYBhCPAAAAGAYQjwAAABgGEI8AAAAYBhCPAAAAGAYQjwAAABgGEI8AAAAYJiwQ3xtba3uuOMOZWVlyWazacuWLSHTH3jgAdlstpCf6dOnh7Q5e/as5s2bp+TkZKWmpmrBggVqbm7u0oYAAAAAfUXYIb6lpUVjxoxRVVXVFdtMnz5dJ0+eDP68+uqrIdPnzZunw4cPy+Vyadu2baqtrdWiRYvCrx4AAADog2LDnWHGjBmaMWPGVds4nU5lZma2O+2TTz7Rzp07tX//fuXm5kqS1q1bp5kzZ+q5555TVlZWuCUBAAAAfUq3XBO/e/dupaen65ZbbtHixYt15syZ4LS6ujqlpqYGA7wkFRYWym63a9++fd1RDgAAANCrhH0m/lqmT5+uOXPmKCcnR0ePHtXjjz+uGTNmqK6uTjExMXK73UpPTw8tIjZWaWlpcrvd7S7T6/XK6/UGhz0ejyTJ5/MpNjY2+NoUl2s1vWZnTMCqcjrMaQ+E/I5G390Pesv+Ee2sqNmk/gEARLeIh/i5c+cGX48aNUqjR4/W0KFDtXv3bk2dOrVTy6ysrFRFRUWb8TU1NUpMTJQkuVyuzhVsIdNrXjvRwkLCtCbXb3UJV7Rjx452x5u+f5iiJ2u+cOFCj60LANC7RTzEf9eNN96o66+/Xg0NDZo6daoyMzN16tSpkDaXLl3S2bNnr3gd/fLly1VeXh4c9ng8ys7OVlFRkRISEuRyuTRt2jQ5HI5u3ZZI8fl8vaLmkavetriqa3PaA1qT69eTB+zy+m1Wl9OuQ6uKQ4Z7y/4R7ayo+fK3iAAAdFW3h/gvvvhCZ86c0YABAyRJ+fn5OnfunOrr6zV+/HhJ0rvvviu/36+8vLx2l+F0OuV0OtuMdzgcwYPvt1+bwvSava3RGYrb4/XborbeK+0Dpu8fpujJmk3rGwBA9Ao7xDc3N6uhoSE4fOzYMR08eFBpaWlKS0tTRUWFSkpKlJmZqaNHj+rRRx/VTTfdpOLib842Dh8+XNOnT9fChQu1fv16+Xw+lZWVae7cudyZBgAAAOiAsO9Oc+DAAY0bN07jxo2TJJWXl2vcuHFasWKFYmJi9NFHH+nOO+/UzTffrAULFmj8+PH605/+FHImfdOmTRo2bJimTp2qmTNnavLkyfrNb34Tua0CAAAAerGwz8QXFBQoELjynT7efvva10mnpaWpuro63FUDAAAAUDfdJx4AAABA9yHEAwAAAIYhxAMAAACGIcQDAAAAhiHEAwAAAIYhxAMAAACGIcQDAAAAhiHEAwAAAIYhxAMAAACGIcQDAAAAhiHEAwAAAIYhxAMAAACGIcQDAAAAhiHEAwAAAIYhxAMAAACGIcQDAAAAhiHEAwAAAIYhxAMAAACGIcQDAAAAhiHEAwAAAIYhxAMAAACGIcQDACKqtrZWd9xxh7KysmSz2bRly5aQ6Q888IBsNlvIz/Tp00PanD17VvPmzVNycrJSU1O1YMECNTc39+BWAEB0I8QDACKqpaVFY8aMUVVV1RXbTJ8+XSdPngz+vPrqqyHT582bp8OHD8vlcmnbtm2qra3VokWLurt0ADBGrNUFAAB6lxkzZmjGjBlXbeN0OpWZmdnutE8++UQ7d+7U/v37lZubK0lat26dZs6cqeeee05ZWVkRrxkATMOZeABAj9u9e7fS09N1yy23aPHixTpz5kxwWl1dnVJTU4MBXpIKCwtlt9u1b98+K8oFgKjDmXgAQI+aPn265syZo5ycHB09elSPP/64ZsyYobq6OsXExMjtdis9PT1kntjYWKWlpcntdre7TK/XK6/XGxz2eDySJJ/Pp9jY2OBrhO9yv0V7/zljAlaXcEVOeyDkd7SLxn9rU/bDSOjoNhLiAQA9au7cucHXo0aN0ujRozV06FDt3r1bU6dO7dQyKysrVVFR0WZ8TU2NEhMTJUkul6tzBUNS9Pff2olWV3Bta3L9VpfQITt27LC6hCuK9v0wEi5cuNChdoR4AIClbrzxRl1//fVqaGjQ1KlTlZmZqVOnToW0uXTpks6ePXvF6+iXL1+u8vLy4LDH41F2draKioqUkJAgl8uladOmyeFwdOu29EY+n8+I/hu56m2rS7gipz2gNbl+PXnALq/fZnU513RoVbHVJbRhyn4YCZe/SbwWQjwAwFJffPGFzpw5owEDBkiS8vPzde7cOdXX12v8+PGSpHfffVd+v195eXntLsPpdMrpdLYZ73A4ggf8b79G+KK9/7yt0R+OvX6bEXVG879ztO+HkdDR7SPEAwAiqrm5WQ0NDcHhY8eO6eDBg0pLS1NaWpoqKipUUlKizMxMHT16VI8++qhuuukmFRd/c/Zv+PDhmj59uhYuXKj169fL5/OprKxMc+fO5c40APBX3J0GABBRBw4c0Lhx4zRu3DhJUnl5ucaNG6cVK1YoJiZGH330ke68807dfPPNWrBggcaPH68//elPIWfSN23apGHDhmnq1KmaOXOmJk+erN/85jdWbRIARB3OxAMAIqqgoECBwJXvwvH229e+djktLU3V1dWRLAsAehVCPGCxIcu2hww7YwJaO/GbP9LqjmsnP392VsSXCQAAehaX0wAAAACGIcQDAAAAhiHEAwAAAIYhxAMAAACGIcQDAAAAhiHEAwAAAIYhxAMAAACGIcQDAAAAhiHEAwAAAIYhxAMAAACGIcQDAAAAhiHEAwAAAIYhxAMAAACGIcQDAAAAhiHEAwAAAIYhxAMAAACGIcQDAAAAhiHEAwAAAIYhxAMAAACGIcQDAAAAhiHEAwAAAIYJO8TX1tbqjjvuUFZWlmw2m7Zs2RIyPRAIaMWKFRowYIASEhJUWFiozz77LKTN2bNnNW/ePCUnJys1NVULFixQc3NzlzYEAAAA6CvCDvEtLS0aM2aMqqqq2p2+du1avfjii1q/fr327dunfv36qbi4WF9//XWwzbx583T48GG5XC5t27ZNtbW1WrRoUee3AgAAAOhDYsOdYcaMGZoxY0a70wKBgF544QU98cQT+uEPfyhJ+v3vf6+MjAxt2bJFc+fO1SeffKKdO3dq//79ys3NlSStW7dOM2fO1HPPPaesrKwubA4AAADQ+4Ud4q/m2LFjcrvdKiwsDI5LSUlRXl6e6urqNHfuXNXV1Sk1NTUY4CWpsLBQdrtd+/bt049+9KM2y/V6vfJ6vcFhj8cjSfL5fIqNjQ2+NsXlWk2v2RkTsKqcDnPaAyG/TdDdNXfHftdb9umeWicAAF0V0RDvdrslSRkZGSHjMzIygtPcbrfS09NDi4iNVVpaWrDNd1VWVqqioqLN+JqaGiUmJkqSXC5Xl+vvaabXvHaihYWEaU2u3+oSwtZdNe/YsaNbliuZv093twsXLvTYugAAvVtEQ3x3Wb58ucrLy4PDHo9H2dnZKioqUkJCglwul6ZNmyaHw2FhlR3n8/l6Rc0jV71tcVXX5rQHtCbXrycP2OX126wup0O6u+ZDq4ojvszesk93t8vfIgIA0FURDfGZmZmSpMbGRg0YMCA4vrGxUWPHjg22OXXqVMh8ly5d0tmzZ4Pzf5fT6ZTT6Wwz3uFwBA++335tikjXPGTZ9ogt67ucMQGtnSiNe/pdeVsvB0szQrEkef22b9Vthu6quTvfJ7wPr70uAAAiIaL3ic/JyVFmZqZ27doVHOfxeLRv3z7l5+dLkvLz83Xu3DnV19cH27z77rvy+/3Ky8uLZDkAAABArxT2mfjm5mY1NDQEh48dO6aDBw8qLS1NgwYN0tKlS/XUU0/p+9//vnJycvTkk08qKytLs2fPliQNHz5c06dP18KFC7V+/Xr5fD6VlZVp7ty53JkGAAAA6ICwQ/yBAwc0ZcqU4PDla9Xnz5+vjRs36tFHH1VLS4sWLVqkc+fOafLkydq5c6fi4+OD82zatEllZWWaOnWq7Ha7SkpK9OKLL0ZgcwAAAIDeL+wQX1BQoEDgyre+s9lsWr16tVavXn3FNmlpaaqurg531QAAAABkyN1pAACAebrzhgtAXxfRP2wFAAAA0P0I8QAAAIBhCPEAAACAYQjxAAAAgGEI8QAAAIBhCPEAAACAYQjxAAAAgGEI8QAAAIBhCPEAAACAYQjxAICIqq2t1R133KGsrCzZbDZt2bIlZHogENCKFSs0YMAAJSQkqLCwUJ999llIm7Nnz2revHlKTk5WamqqFixYoObm5h7cCgCIbrFWFwAA6F1aWlo0ZswY/ff//t81Z86cNtPXrl2rF198Ub/73e+Uk5OjJ598UsXFxfr4448VHx8vSZo3b55Onjwpl8sln8+nBx98UIsWLVJ1dXVPbw7Q5wxZtr1H1/f5s7N6dH29BSEeABBRM2bM0IwZM9qdFggE9MILL+iJJ57QD3/4Q0nS73//e2VkZGjLli2aO3euPvnkE+3cuVP79+9Xbm6uJGndunWaOXOmnnvuOWVlZfXYtgBAtOJyGgBAjzl27JjcbrcKCwuD41JSUpSXl6e6ujpJUl1dnVJTU4MBXpIKCwtlt9u1b9++Hq8ZAKIRZ+IBAD3G7XZLkjIyMkLGZ2RkBKe53W6lp6eHTI+NjVVaWlqwzXd5vV55vd7gsMfjkST5fD7FxsYGXyN8l/utM/3njAlEuhwjOe2BkN8I1ZF9qyv7oWk6uo2EeACA8SorK1VRUdFmfE1NjRITEyVJLperp8vqVTrTf2sndkMhBluT67e6hKi0Y8eODrftC+/jCxcudKgdIR4A0GMyMzMlSY2NjRowYEBwfGNjo8aOHRtsc+rUqZD5Ll26pLNnzwbn/67ly5ervLw8OOzxeJSdna2ioiIlJCTI5XJp2rRpcjgcEd6i3s/n83W6/0auerubqjKL0x7Qmly/njxgl9dvs7qcqHNoVfE123RlPzTN5W8Sr4UQDwDoMTk5OcrMzNSuXbuCod3j8Wjfvn1avHixJCk/P1/nzp1TfX29xo8fL0l699135ff7lZeX1+5ynU6nnE5nm/EOhyN4wP/2a4SvM/3nbSWwfpvXb6NP2hHOftUX3scd3T5CPAAgopqbm9XQ0BAcPnbsmA4ePKi0tDQNGjRIS5cu1VNPPaXvf//7wVtMZmVlafbs2ZKk4cOHa/r06Vq4cKHWr18vn8+nsrIyzZ07lzvTAMBfEeIBABF14MABTZkyJTh8+TKX+fPna+PGjXr00UfV0tKiRYsW6dy5c5o8ebJ27twZvEe8JG3atEllZWWaOnWq7Ha7SkpK9OKLL/b4tgBAtCLEAwAiqqCgQIHAle/CYbPZtHr1aq1evfqKbdLS0niwEwBcBfeJBwAAAAxDiAcAAAAMQ4gHAAAADEOIBwAAAAxDiAcAAAAMQ4gHAAAADEOIBwAAAAxDiAcAAAAMQ4gHAAAADEOIBwAAAAxDiAcAAAAMQ4gHAAAADEOIBwAAAAxDiAcAAAAMQ4gHAAAADEOIBwAAAAxDiAcAAAAMQ4gHAAAADEOIBwAAAAxDiAcAAAAMQ4gHAAAADEOIBwAAAAxDiAcAAAAMQ4gHAAAADEOIBwAAAAxDiAcAAAAMQ4gHAAAADEOIBwAAAAxDiAcAAAAMQ4gHAAAADEOIBwAAAAxDiAcAAAAMQ4gHAAAADBPxEL9q1SrZbLaQn2HDhgWnf/311yotLVX//v113XXXqaSkRI2NjZEuAwAAAOi1uuVM/N/8zd/o5MmTwZ/33nsvOO3hhx/WW2+9pTfeeEN79uzRiRMnNGfOnO4oAwAAAOiVYrtlobGxyszMbDO+qalJr7zyiqqrq3X77bdLkjZs2KDhw4dr7969mjRpUneUAwAAAPQq3RLiP/vsM2VlZSk+Pl75+fmqrKzUoEGDVF9fL5/Pp8LCwmDbYcOGadCgQaqrq7tiiPd6vfJ6vcFhj8cjSfL5fIqNjQ2+jjYjV73d7ninPaA1udL41Tvl9dsitj5nTMQW1XbZ9kDIb1OYWHd319wd75XLy4zG9+GVWFGzSf0DAIhuEQ/xeXl52rhxo2655RadPHlSFRUV+m//7b/p0KFDcrvdiouLU2pqasg8GRkZcrvdV1xmZWWlKioq2oyvqalRYmKiJMnlckV0OyJh7cSrT1+T6++ZQiLIxJolM+vurpp37NjRLcuVovN9eC09WfOFCxd6bF0AgN4t4iF+xowZwdejR49WXl6eBg8erH/5l39RQkJCp5a5fPlylZeXB4c9Ho+ys7NVVFSkhIQEuVwuTZs2TQ6Ho8v1R9LVz8T79eQBe0TPxHcnE2uWzKy7u2s+tKo44sv0+XxR+z68EitqvvwtIgAAXdUtl9N8W2pqqm6++WY1NDRo2rRpunjxos6dOxdyNr6xsbHda+gvczqdcjqdbcY7HI7gwffbr6OFt/XqAczrt12zTbQxsWbJzLq7q+bufJ9E4/vwWnqyZtP6BgAQvbo9xDc3N+vo0aO67777NH78eDkcDu3atUslJSWSpCNHjuj48ePKz8/v7lIASBqybHvEl+mMCWjtxG++ffr2fzw+f3ZWxNcFAAC6IcT//Oc/1x133KHBgwfrxIkTWrlypWJiYnTPPfcoJSVFCxYsUHl5udLS0pScnKwlS5YoPz+fO9MAAAAAHRTxEP/FF1/onnvu0ZkzZ3TDDTdo8uTJ2rt3r2644QZJ0vPPPy+73a6SkhJ5vV4VFxfrpZdeinQZAAAAQK8V8Yc9vfbaazpx4oS8Xq+++OILvfbaaxo6dGhwenx8vKqqqnT27Fm1tLTozTffvOr18ACA3oUnewNA13XLE1sBALganuwNAF3T7X/YCgDAd/FkbwDoGs7EAwB63OUne994442aN2+ejh8/LknXfLI3AOAbnIkHAPSo7niyt9frldfrDQ5ffrCWz+dTbGxs8DXCd7nfOtN/zphApMsxktMeCPmNUB3Zt7qyH5qmo9tIiAcA9KjueLJ3ZWWlKioq2oyvqalRYmKiJMnlcnWuYEjqXP+tndgNhRhsTa7f6hKi0o4dOzrcti+8jy9cuNChdoR4AIClIvFk7+XLl6u8vDw47PF4lJ2draKiIiUkJMjlcmnatGk8NbcTfD5fp/tv5Kq3u6kqszjtAa3J9evJA3Z5/WY9PbwnHFpVfM02XdkPTXP5m8RrIcQDACwViSd7O51OOZ3ONuMdDkfwgP/t1whfZ/rv209whuT12+iTdoSzX/WF93FHt48QDwDoUTzZGwC6jhAPAOhRPNkbALqOEA8A6FGvvfbaVadffrJ3VVVVD1XUdwxZtj3seZwxAa2d+M317VwKAkQP7hMPAAAAGIYQDwAAABiGEA8AAAAYhhAPAAAAGIYQDwAAABiGEA8AAAAYhhAPAAAAGIYQDwAAABiGEA8AAAAYhhAPAAAAGCbW6gIAAADQdw1Ztv2abZwxAa2dKI1c9ba8rbZOr+vzZ2d1et5ow5l4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMLFWF9DThizbbnUJAAAAQJdwJh4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMEyfe9gTgJ7T0w9X+/zZWT26PgAArMKZeAAAAMAwnIkH0GuEc+bfGRPQ2onSyFVvy9tq69T6OPMPALAKZ+IBAAAAw3AmHgAAC/X0344AfVlv+lstzsQDAAAAhiHEAwAAAIYhxAMAAACGsTTEV1VVaciQIYqPj1deXp4++OADK8sBAEQZjhMA0D7LQvzrr7+u8vJyrVy5Uh9++KHGjBmj4uJinTp1yqqSAABRhOMEAFyZZXen+dWvfqWFCxfqwQcflCStX79e27dv129/+1stW7bMqrIAAFHCquMEd4sBYAJLzsRfvHhR9fX1Kiws/H+F2O0qLCxUXV2dFSUBAKIIxwkAuDpLzsR/9dVXam1tVUZGRsj4jIwMffrpp23ae71eeb3e4HBTU5Mk6ezZs4qPj9eFCxd05swZORyOa6479lJLF6vvulh/QBcu+BXrs6vV37knRfY0E2uWzKybmntGJGo+c+ZMWO3Pnz8vSQoEAp1aX1/S148T0cTE93e0oQ+7ztQ+DPc4IXX8WGHEw54qKytVUVHRZnxOTo4F1UTGT60uoBNMrFkys25q7hldrfn6X3ZuvvPnzyslJaWLa8e39cbjRDQx8f0dbejDrjOxDzt7nJCufaywJMRff/31iomJUWNjY8j4xsZGZWZmtmm/fPlylZeXB4f9fr/Onj2r/v376/z588rOztZf/vIXJScnd3vtkeDxeKi5h5hYNzX3DCtqDgQCOn/+vLKysnpkfSbr68eJaGLi+zva0Idd15f6sKPHCktCfFxcnMaPH69du3Zp9uzZkr75wN21a5fKysratHc6nXI6nSHjUlNTJUk22zdfqSQnJxv3j0rNPcfEuqm5Z/R0zZyB7xiOE9GH/us6+rDr+kofduRYYdnlNOXl5Zo/f75yc3M1ceJEvfDCC2ppaQnehQAA0LdxnACAK7MsxN999906ffq0VqxYIbfbrbFjx2rnzp1t/ogJANA3cZwAgCuz9A9by8rK2v1aNBxOp1MrV65s8zVqNKPmnmNi3dTcM0ysuS/qq8eJaEL/dR192HX0YVu2APc6AwAAAIxiycOeAAAAAHQeIR4AAAAwDCEeAAAAMEyvCvFDhgyRzWYL+Xn22WetLqvDvF6vxo4dK5vNpoMHD1pdzlXdeeedGjRokOLj4zVgwADdd999OnHihNVlXdHnn3+uBQsWKCcnRwkJCRo6dKhWrlypixcvWl3aVT399NP6wQ9+oMTExOA9r6NNVVWVhgwZovj4eOXl5emDDz6wuqSrqq2t1R133KGsrCzZbDZt2bLF6pJgAZM+b6OJqZ+lVjLtMzKaVFZWasKECUpKSlJ6erpmz56tI0eOWF1W1OhVIV6SVq9erZMnTwZ/lixZYnVJHfboo48a8yTHKVOm6F/+5V905MgR/Z//83909OhR/fjHP7a6rCv69NNP5ff79etf/1qHDx/W888/r/Xr1+vxxx+3urSrunjxou666y4tXrzY6lLa9frrr6u8vFwrV67Uhx9+qDFjxqi4uFinTp2yurQramlp0ZgxY1RVVWV1KbCQSZ+30cTUz1KrmPgZGU327Nmj0tJS7d27Vy6XSz6fT0VFRWppabG6tOgQ6EUGDx4ceP75560uo1N27NgRGDZsWODw4cMBSYE///nPVpcUlq1btwZsNlvg4sWLVpfSYWvXrg3k5ORYXUaHbNiwIZCSkmJ1GW1MnDgxUFpaGhxubW0NZGVlBSorKy2squMkBTZv3mx1Gehhpn/eRhuTPkt7mumfkdHm1KlTAUmBPXv2WF1KVOh1Z+KfffZZ9e/fX+PGjdMvfvELXbp0yeqSrqmxsVELFy7U//7f/1uJiYlWlxO2s2fPatOmTfrBD34gh8NhdTkd1tTUpLS0NKvLMNbFixdVX1+vwsLC4Di73a7CwkLV1dVZWBlwZaZ/3kYjPkvbx2dk5DU1NUkS+9tf9aoQ/z/+x//Qa6+9pj/+8Y/62c9+pmeeeUaPPvqo1WVdVSAQ0AMPPKCHHnpIubm5VpcTlscee0z9+vVT//79dfz4cW3dutXqkjqsoaFB69at089+9jOrSzHWV199pdbW1jZPz8zIyJDb7baoKuDKTP68jVZ8ll4Zn5GR5ff7tXTpUt16660aOXKk1eVEhagP8cuWLWvzx6rf/fn0008lSeXl5SooKNDo0aP10EMP6Ze//KXWrVsnr9cbtXWvW7dO58+f1/Lly3u8xs7WfNkjjzyiP//5z6qpqVFMTIzuv/9+BXr42WHh1ixJX375paZPn6677rpLCxcu7NF6O1szgCsz8fM22pj4WYq+pbS0VIcOHdJrr71mdSlRI+qf2Hr69GmdOXPmqm1uvPFGxcXFtRl/+PBhjRw5Up9++qluueWW7iqxXR2t+yc/+Yneeust2Wy24PjW1lbFxMRo3rx5+t3vftfdpQZ1pa+/+OILZWdn6/3331d+fn53ldhGuDWfOHFCBQUFmjRpkjZu3Ci7vef/H9uZft64caOWLl2qc+fOdXN1HXfx4kUlJibqX//1XzV79uzg+Pnz5+vcuXNGfDNjs9m0efPmkPphHhM/b6ONiZ+l0a43fEZGi7KyMm3dulW1tbXKycmxupyoEWt1Addyww036IYbbujUvAcPHpTdbld6enqEq7q2jtb94osv6qmnngoOnzhxQsXFxXr99deVl5fXnSW20ZW+9vv9ktTj33qEU/OXX36pKVOmaPz48dqwYYNlB52u9HM0iYuL0/jx47Vr167gAcrv92vXrl0qKyuztjj0KSZ+3kYbEz9Lox2fkV0XCAS0ZMkSbd68Wbt37ybAf0fUh/iOqqur0759+zRlyhQlJSWprq5ODz/8sO69915973vfs7q8Kxo0aFDI8HXXXSdJGjp0qAYOHGhFSde0b98+7d+/X5MnT9b3vvc9HT16VE8++aSGDh3ao2fhw/Hll1+qoKBAgwcP1nPPPafTp08Hp2VmZlpY2dUdP35cZ8+e1fHjx9Xa2hq8n/VNN90U3FesVF5ervnz5ys3N1cTJ07UCy+8oJaWFj344INWl3ZFzc3NamhoCA4fO3ZMBw8eVFpaWpv3I3oXEz9vo42pn6VWMfEzMpqUlpaqurpaW7duVVJSUvBvCVJSUpSQkGBxdVHAylvjRFJ9fX0gLy8vkJKSEoiPjw8MHz488MwzzwS+/vprq0sLy7Fjx6L+lmcfffRRYMqUKYG0tLSA0+kMDBkyJPDQQw8FvvjiC6tLu6INGzYEJLX7E83mz5/fbs1//OMfrS4taN26dYFBgwYF4uLiAhMnTgzs3bvX6pKu6o9//GO7fTp//nyrS0MPM+HzNtqY+llqJdM+I6PJlfa1DRs2WF1aVIj6a+IBAAAAhOJCNgAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeOBbjh49qp/97Ge68cYbFR8fr+TkZN166636p3/6J/3nf/6n1eUBAABIkmKtLgCIFtu3b9ddd90lp9Op+++/XyNHjtTFixf13nvv6ZFHHtHhw4f1m9/8xuoyAQAAZAsEAgGriwCsduzYMY0ePVoDBw7Uu+++qwEDBoRMb2ho0Pbt2/UP//APFlUIAADw/xDiAUmLFy/W+vXr9e///u/6wQ9+YHU5AAAAV0WIByQNHDhQTqdTR48etboUAACAa+IPW9HneTweffnllxo1apTVpQAAAHQIIR59nsfjkSQlJSVZXAkAAEDHEOLR5yUnJ0uSzp8/b3ElAAAAHcM18YCk//Jf/osSEhLU0NBgdSkAAADXxJl4QNLf/d3f6ejRo6qrq7O6FAAAgGsixAOSHn30UfXr109///d/r8bGxjbTjx49qn/6p3+yoDIAAIC2eGIrIGno0KGqrq7W3XffreHDh4c8sfX999/XG2+8oQceeMDqMgEAACRxTTwQ4rPPPtMvfvELuVwunThxQk6nU6NHj9bcuXO1cOFCOZ1Oq0sEAAAgxAMAAACm4Zp4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMEY+7Mnv9+vEiRNKSkqSzWazuhwA6JBAIKDz588rKytLdjvnUAAAnWdkiD9x4oSys7OtLgMAOuUvf/mLBg4caHUZAACDGRnik5KSJH1zIExOTu7wfD6fTzU1NSoqKpLD4eiu8nol+q7z6LvO6Y395vF4lJ2dHfwMAwCgs4wM8ZcvoUlOTg47xCcmJio5ObnXhIKeQt91Hn3XOb2537gMEADQVVyUCQAAABiGEA8AAAAYhhAPAAAAGIYQDwAAABiGEA8AAAAYhhAPAAAAGIYQDwAAABiGEA8AAAAYhhAPAAAAGIYQDwAAABiGEA8AAAAYJtbqAoBoNGTZ9ogtyxkT0NqJ0shVb8vbamsz/fNnZ0VsXQAAoG/gTDwAAABgGEI8AAAAYBhCPAAAAGAYQjwAAABgGEI8AAAAYBhCPAAAAGAYQjwAAABgGEI8AAAAYBhCPAAAAGAYQjwAAABgGEI8AAAAYJiwQnxlZaUmTJigpKQkpaena/bs2Tpy5EhIm4KCAtlstpCfhx56KKTN8ePHNWvWLCUmJio9PV2PPPKILl261PWtAQAAAPqA2HAa79mzR6WlpZowYYIuXbqkxx9/XEVFRfr444/Vr1+/YLuFCxdq9erVweHExMTg69bWVs2aNUuZmZl6//33dfLkSd1///1yOBx65plnIrBJAAAAQO8WVojfuXNnyPDGjRuVnp6u+vp63XbbbcHxiYmJyszMbHcZNTU1+vjjj/XOO+8oIyNDY8eO1Zo1a/TYY49p1apViouL68RmAAAAAH1Hl66Jb2pqkiSlpaWFjN+0aZOuv/56jRw5UsuXL9eFCxeC0+rq6jRq1ChlZGQExxUXF8vj8ejw4cNdKQcAAADoE8I6E/9tfr9fS5cu1a233qqRI0cGx//0pz/V4MGDlZWVpY8++kiPPfaYjhw5ojfffFOS5Ha7QwK8pOCw2+1ud11er1derzc47PF4JEk+n08+n6/DNV9uG848+EZf6ztnTCByy7IHQn5/V1/p03D1xn2uN20LAMBanQ7xpaWlOnTokN57772Q8YsWLQq+HjVqlAYMGKCpU6fq6NGjGjp0aKfWVVlZqYqKijbja2pqQq637yiXy9WpOtB3+m7txMgvc02uv93xO3bsiPzKepHetM99+1tJAAC6olMhvqysTNu2bVNtba0GDhx41bZ5eXmSpIaGBg0dOlSZmZn64IMPQto0NjZK0hWvo1++fLnKy8uDwx6PR9nZ2SoqKlJycnKH6/b5fHK5XJo2bZocDkeH50Pf67uRq96O2LKc9oDW5Pr15AG7vH5bm+mHVhVHbF29SW/c5y5/iwgAQFeFFeIDgYCWLFmizZs3a/fu3crJybnmPAcPHpQkDRgwQJKUn5+vp59+WqdOnVJ6erqkb860JScna8SIEe0uw+l0yul0thnvcDg6dXDv7HzoO33nbW0btru8TL+t3eX2hf7sit60z/WW7QAAWC+sEF9aWqrq6mpt3bpVSUlJwWvYU1JSlJCQoKNHj6q6ulozZ85U//799dFHH+nhhx/WbbfdptGjR0uSioqKNGLECN13331au3at3G63nnjiCZWWlrYb1AEAAACECuvuNC+//LKamppUUFCgAQMGBH9ef/11SVJcXJzeeecdFRUVadiwYfrHf/xHlZSU6K233gouIyYmRtu2bVNMTIzy8/N177336v777w+5rzwAAACAKwv7cpqryc7O1p49e665nMGDB/PHfAAAAEAndek+8QAAAAB6HiEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMEys1QUAfd2QZdt7dH2fPzurR9cHAAAijzPxAAAAgGEI8QAAAIBhCPEAAACAYQjxAAAAgGEI8QAAAIBhCPEAAACAYQjxAAAAgGHCCvGVlZWaMGGCkpKSlJ6ertmzZ+vIkSMhbb7++muVlpaqf//+uu6661RSUqLGxsaQNsePH9esWbOUmJio9PR0PfLII7p06VLXtwYAAADoA8IK8Xv27FFpaan27t0rl8sln8+noqIitbS0BNs8/PDDeuutt/TGG29oz549OnHihObMmROc3traqlmzZunixYt6//339bvf/U4bN27UihUrIrdVAAAAQC8W1hNbd+7cGTK8ceNGpaenq76+Xrfddpuampr0yiuvqLq6WrfffrskacOGDRo+fLj27t2rSZMmqaamRh9//LHeeecdZWRkaOzYsVqzZo0ee+wxrVq1SnFxcZHbOgAAAKAX6tI18U1NTZKktLQ0SVJ9fb18Pp8KCwuDbYYNG6ZBgwaprq5OklRXV6dRo0YpIyMj2Ka4uFgej0eHDx/uSjkAAABAnxDWmfhv8/v9Wrp0qW699VaNHDlSkuR2uxUXF6fU1NSQthkZGXK73cE23w7wl6dfntYer9crr9cbHPZ4PJIkn88nn8/X4Zovtw1nHnyjr/WdMyYQuWXZAyG/rWbKv2Fv3Od607YAAKzV6RBfWlqqQ4cO6b333otkPe2qrKxURUVFm/E1NTVKTEwMe3kulysSZfVJfaXv1k6M/DLX5Pojv9BO2LFjh9UlhKU37XMXLlywugQAQC/RqRBfVlambdu2qba2VgMHDgyOz8zM1MWLF3Xu3LmQs/GNjY3KzMwMtvnggw9Clnf57jWX23zX8uXLVV5eHhz2eDzKzs5WUVGRkpOTO1y3z+eTy+XStGnT5HA4Ojwf+l7fjVz1dsSW5bQHtCbXrycP2OX12yK23M46tKrY6hI6pDfuc5e/RQQAoKvCCvGBQEBLlizR5s2btXv3buXk5IRMHz9+vBwOh3bt2qWSkhJJ0pEjR3T8+HHl5+dLkvLz8/X000/r1KlTSk9Pl/TNmbbk5GSNGDGi3fU6nU45nc424x0OR6cO7p2dD32n77ytkQ/bXr+tW5YbLtP+/XrTPtdbtgMAYL2wQnxpaamqq6u1detWJSUlBa9hT0lJUUJCglJSUrRgwQKVl5crLS1NycnJWrJkifLz8zVp0iRJUlFRkUaMGKH77rtPa9euldvt1hNPPKHS0tJ2gzoAAACAUGGF+JdfflmSVFBQEDJ+w4YNeuCBByRJzz//vOx2u0pKSuT1elVcXKyXXnop2DYmJkbbtm3T4sWLlZ+fr379+mn+/PlavXp117YEAAAA6CPCvpzmWuLj41VVVaWqqqorthk8eLBxf1wHAAAARItO350G6ElDlm23ugQAAICo0aWHPQEAAADoeYR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwYYf42tpa3XHHHcrKypLNZtOWLVtCpj/wwAOy2WwhP9OnTw9pc/bsWc2bN0/JyclKTU3VggUL1Nzc3KUNAQAAAPqKsEN8S0uLxowZo6qqqiu2mT59uk6ePBn8efXVV0Omz5s3T4cPH5bL5dK2bdtUW1urRYsWhV89AAAA0AfFhjvDjBkzNGPGjKu2cTqdyszMbHfaJ598op07d2r//v3Kzc2VJK1bt04zZ87Uc889p6ysrHBLAgAAAPqUbrkmfvfu3UpPT9ctt9yixYsX68yZM8FpdXV1Sk1NDQZ4SSosLJTdbte+ffu6oxwAAACgVwn7TPy1TJ8+XXPmzFFOTo6OHj2qxx9/XDNmzFBdXZ1iYmLkdruVnp4eWkRsrNLS0uR2u9tdptfrldfrDQ57PB5Jks/nk8/n63Btl9uGMw++YXXfOWMClqw3Epz2QMhvq5my/1u9z3WH3rQtAABrRTzEz507N/h61KhRGj16tIYOHardu3dr6tSpnVpmZWWlKioq2oyvqalRYmJi2MtzuVydqgPW9d3aiZasNqLW5PqtLkGStGPHDqtLCEtver9euHDB6hIAAL1ExEP8d9144426/vrr1dDQoKlTpyozM1OnTp0KaXPp0iWdPXv2itfRL1++XOXl5cFhj8ej7OxsFRUVKTk5ucO1+Hw+uVwuTZs2TQ6Ho3Mb1EdZ3XcjV73d4+uMFKc9oDW5fj15wC6v32Z1OTq0qtjqEjrE6n2uO1z+FhEAgK7q9hD/xRdf6MyZMxowYIAkKT8/X+fOnVN9fb3Gjx8vSXr33Xfl9/uVl5fX7jKcTqecTmeb8Q6Ho1MH987OB+v6zttqffjtKq/fFhXbYdq+35ver71lOwAA1gs7xDc3N6uhoSE4fOzYMR08eFBpaWlKS0tTRUWFSkpKlJmZqaNHj+rRRx/VTTfdpOLib87+DR8+XNOnT9fChQu1fv16+Xw+lZWVae7cudyZBgAAAOiAsO9Oc+DAAY0bN07jxo2TJJWXl2vcuHFasWKFYmJi9NFHH+nOO+/UzTffrAULFmj8+PH605/+FHImfdOmTRo2bJimTp2qmTNnavLkyfrNb34Tua0CAAAAerGwz8QXFBQoELjyXTbefvva1y6npaWpuro63FUDAAAAUDfdJx4AAABA9yHEAwAAAIYhxAMAAACGIcQDAAAAhiHEAwAAAIYhxAMAAACGIcQDAAAAhiHEAwAAAIYhxAMAAACGIcQDAAAAhiHEAwAAAIaJtboAAD1ryLLtPbauz5+d1WPrAgCgL+FMPAAAAGAYQjwAAABgGEI8AAAAYBhCPAAAAGAYQjwAAABgGEI8AAAAYBhCPAAAAGAYQjwAAABgGEI8AAAAYBhCPAAAAGAYQjwAAABgGEI8AAAAYBhCPAAAAGAYQjwAAABgGEI8AAAAYBhCPAAAAGAYQjwAAABgGEI8AAAAYBhCPAAAAGAYQjwAAABgGEI8AAAAYBhCPAAAAGAYQjwAAABgGEI8AAAAYBhCPAAAAGAYQjwAAABgGEI8AAAAYBhCPAAAAGAYQjwAAABgGEI8AAAAYBhCPAAAAGAYQjwAAABgmLBDfG1tre644w5lZWXJZrNpy5YtIdMDgYBWrFihAQMGKCEhQYWFhfrss89C2pw9e1bz5s1TcnKyUlNTtWDBAjU3N3dpQwAAAIC+IuwQ39LSojFjxqiqqqrd6WvXrtWLL76o9evXa9++ferXr5+Ki4v19ddfB9vMmzdPhw8flsvl0rZt21RbW6tFixZ1fisAAACAPiQ23BlmzJihGTNmtDstEAjohRde0BNPPKEf/vCHkqTf//73ysjI0JYtWzR37lx98skn2rlzp/bv36/c3FxJ0rp16zRz5kw999xzysrK6sLmAAAAAL1f2CH+ao4dOya3263CwsLguJSUFOXl5amurk5z585VXV2dUlNTgwFekgoLC2W327Vv3z796Ec/arNcr9crr9cbHPZ4PJIkn88nn8/X4foutw1nHnzD6r5zxgQsWW8kOO2BkN99SVf2F6v3ue7Qm7YFAGCtiIZ4t9stScrIyAgZn5GREZzmdruVnp4eWkRsrNLS0oJtvquyslIVFRVtxtfU1CgxMTHsOl0uV9jz4BtW9d3aiZasNqLW5PqtLqHH7dixo8vL6E3v1wsXLlhdAgCgl4hoiO8uy5cvV3l5eXDY4/EoOztbRUVFSk5O7vByfD6fXC6Xpk2bJofD0R2l9lrt9d3IVW9bXJUZnPaA1uT69eQBu7x+m9Xl9KhDq4o7PW9vfL9e/hYRAICuimiIz8zMlCQ1NjZqwIABwfGNjY0aO3ZssM2pU6dC5rt06ZLOnj0bnP+7nE6nnE5nm/EOh6NTB/fOzofQvvO29q1A2lVev63P9Vkk3me96f3aW7YDAGC9iN4nPicnR5mZmdq1a1dwnMfj0b59+5Sfny9Jys/P17lz51RfXx9s8+6778rv9ysvLy+S5QAAAAC9Uthn4pubm9XQ0BAcPnbsmA4ePKi0tDQNGjRIS5cu1VNPPaXvf//7ysnJ0ZNPPqmsrCzNnj1bkjR8+HBNnz5dCxcu1Pr16+Xz+VRWVqa5c+dyZxoAAACgA8IO8QcOHNCUKVOCw5evVZ8/f742btyoRx99VC0tLVq0aJHOnTunyZMna+fOnYqPjw/Os2nTJpWVlWnq1Kmy2+0qKSnRiy++GIHNAQAAAHq/sEN8QUGBAoEr3yrPZrNp9erVWr169RXbpKWlqbq6OtxVAwAAAFCEr4kHAAAA0P0I8QAAAIBhCPEAAACAYQjxAAAAgGEI8QAAAIBhCPEAAACAYQjxAAAAgGEI8QAAAIBhCPEAAACAYQjxAAAAgGEI8QAAAIBhCPEAAACAYQjxAAAAgGEI8QAAAIBhCPEAAACAYQjxAAAAgGEI8QAAAIBhCPEAAACAYQjxAAAAgGEI8QAAAIBhCPEAAACAYQjxAAAAgGEI8QAAAIBhCPEAAACAYQjxAAAAgGEI8QAAAIBhCPEAAACAYQjxAAAAgGEI8QAAAIBhCPEAAACAYQjxAAAAgGEI8QAAAIBhCPEAAACAYQjxAAAAgGEI8QAAAIBhCPEAAACAYQjxAAAAgGEI8QAAAIBhCPEAAACAYQjxAAAAgGEI8QAAAIBhCPEAAACAYQjxAAAAgGEiHuJXrVolm80W8jNs2LDg9K+//lqlpaXq37+/rrvuOpWUlKixsTHSZQAAAAC9Vrecif+bv/kbnTx5Mvjz3nvvBac9/PDDeuutt/TGG29oz549OnHihObMmdMdZQAAAAC9Umy3LDQ2VpmZmW3GNzU16ZVXXlF1dbVuv/12SdKGDRs0fPhw7d27V5MmTeqOcgAAAIBepVtC/GeffaasrCzFx8crPz9flZWVGjRokOrr6+Xz+VRYWBhsO2zYMA0aNEh1dXVXDPFer1derzc47PF4JEk+n08+n6/DdV1uG848+EZ7feeMCVhVjlGc9kDI776kK++13vh+7U3bAgCwli0QCEQ0WfzhD39Qc3OzbrnlFp08eVIVFRX68ssvdejQIb311lt68MEHQwK5JE2cOFFTpkzR//yf/7PdZa5atUoVFRVtxldXVysxMTGS5QNAt7lw4YJ++tOfqqmpScnJyVaXAwAwWMRD/HedO3dOgwcP1q9+9SslJCR0KsS3dyY+OztbX331VVgHQp/PJ5fLpWnTpsnhcHRug/qo9vpu5Kq3La7KDE57QGty/XrygF1ev83qcnrUoVXFnZ63N75fPR6Prr/+ekI8AKDLuuVymm9LTU3VzTffrIaGBk2bNk0XL17UuXPnlJqaGmzT2NjY7jX0lzmdTjmdzjbjHQ5Hpw7unZ0PoX3nbe1bgbSrvH5bn+uzSLzPetP7tbdsBwDAet1+n/jm5mYdPXpUAwYM0Pjx4+VwOLRr167g9CNHjuj48ePKz8/v7lIAAACAXiHiZ+J//vOf64477tDgwYN14sQJrVy5UjExMbrnnnuUkpKiBQsWqLy8XGlpaUpOTtaSJUuUn5/PnWkAAACADop4iP/iiy90zz336MyZM7rhhhs0efJk7d27VzfccIMk6fnnn5fdbldJSYm8Xq+Ki4v10ksvRboMAAAAoNeKeIh/7bXXrjo9Pj5eVVVVqqqqivSqAQAAgD6h26+JBwAAABBZhHgAAADAMIR4AAAAwDDdfp94AH3XkGXbOz2vMyagtRO/eahYR++v//mzszq9PgAATMKZeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMIR4AAAAwDCEeAAAAMAwhHgAAADAMLFWF4DIGbJse7ct2xkT0NqJ0shVb8vbauu29QAAAODaOBMPAAAAGIYQDwAAABiGEA8AAAAYhhAPAAAAGIYQDwAAABiGEA8AAAAYhhAPAAAAGIYQDwAAABiGEA8AAAAYhhAPAAAAGIYQDwAAABgm1uoCACBShizb3qPr+/zZWT26PgAALuNMPAAAAGAYQjwAAABgGEI8AAAAYBhCPAAAAGAYQjwAAABgGEI8AAAAYBhCPAAAAGAYQjwAAABgGEI8AAAAYBhCPAAAAGAYQjwAAABgGEI8AAAAYBhCPAAAAGAYQjwAAABgGEI8AAAAYJhYK1deVVWlX/ziF3K73RozZozWrVuniRMnWllSRA1Ztt3qEgAAANALWXYm/vXXX1d5eblWrlypDz/8UGPGjFFxcbFOnTplVUkAAACAESwL8b/61a+0cOFCPfjggxoxYoTWr1+vxMRE/fa3v7WqJAAAAMAIllxOc/HiRdXX12v58uXBcXa7XYWFhaqrq2vT3uv1yuv1BoebmpokSWfPnpXP5+vwen0+ny5cuKCx/9+b8vptXdiCjrH0WqUIi/UHdOGCX7E+u1p7oO96E/quc0zotzNnzoTV/vz585KkQCDQHeUAAPoQS3LmV199pdbWVmVkZISMz8jI0KefftqmfWVlpSoqKtqMz8nJ6bYa0dZPrS7AYPRd50R7v13/y87Nd/78eaWkpES2GABAn2LEyeLly5ervLw8OOz3+3X27Fn1799fNlvHz9B5PB5lZ2frL3/5i5KTk7uj1F6Lvus8+q5zemO/BQIBnT9/XllZWVaXAgAwnCUh/vrrr1dMTIwaGxtDxjc2NiozM7NNe6fTKafTGTIuNTW10+tPTk7uNaGgp9F3nUffdU5v6zfOwAMAIsGSP2yNi4vT+PHjtWvXruA4v9+vXbt2KT8/34qSAAAAAGNYdjlNeXm55s+fr9zcXE2cOFEvvPCCWlpa9OCDD1pVEgAAAGAEy0L83XffrdOnT2vFihVyu90aO3asdu7c2eaPXSPJ6XRq5cqVbS7NwbXRd51H33UO/QYAwJXZAtzrDAAAADCKZQ97AgAAANA5hHgAAADAMIR4AAAAwDCEeAAAAMAwfTLEf/7551qwYIFycnKUkJCgoUOHauXKlbp48aLVpUWlqqoqDRkyRPHx8crLy9MHH3xgdUlRr7KyUhMmTFBSUpLS09M1e/ZsHTlyxOqyjPTss8/KZrNp6dKlVpcCAEDU6JMh/tNPP5Xf79evf/1rHT58WM8//7zWr1+vxx9/3OrSos7rr7+u8vJyrVy5Uh9++KHGjBmj4uJinTp1yurSotqePXtUWlqqvXv3yuVyyefzqaioSC0tLVaXZpT9+/fr17/+tUaPHm11KQAARBVuMflXv/jFL/Tyyy/r//7f/2t1KVElLy9PEyZM0P/6X/9L0jdP1s3OztaSJUu0bNkyi6szx+nTp5Wenq49e/botttus7ocIzQ3N+u//tf/qpdeeklPPfWUxo4dqxdeeMHqsgAAiAp98kx8e5qampSWlmZ1GVHl4sWLqq+vV2FhYXCc3W5XYWGh6urqLKzMPE1NTZLEPhaG0tJSzZo1K2T/AwAA37Dsia3RpKGhQevWrdNzzz1ndSlR5auvvlJra2ubp+hmZGTo008/tagq8/j9fi1dulS33nqrRo4caXU5Rnjttdf04Ycfav/+/VaXAgBAVOpVZ+KXLVsmm8121Z/vhs8vv/xS06dP11133aWFCxdaVDl6s9LSUh06dEivvfaa1aUY4S9/+Yv+4R/+QZs2bVJ8fLzV5QAAEJV61TXxp0+f1pkzZ67a5sYbb1RcXJwk6cSJEyooKNCkSZO0ceNG2e296v80XXbx4kUlJibqX//1XzV79uzg+Pnz5+vcuXPaunWrdcUZoqysTFu3blVtba1ycnKsLscIW7Zs0Y9+9CPFxMQEx7W2tspms8lut8vr9YZMAwCgL+pVl9PccMMNuuGGGzrU9ssvv9SUKVM0fvx4bdiwgQDfjri4OI0fP167du0Khni/369du3aprKzM2uKiXCAQ0JIlS7R582bt3r2bAB+GqVOn6j/+4z9Cxj344IMaNmyYHnvsMQI8AADqZSG+o7788ksVFBRo8ODBeu6553T69OngtMzMTAsriz7l5eWaP3++cnNzNXHiRL3wwgtqaWnRgw8+aHVpUa20tFTV1dXaunWrkpKS5Ha7JUkpKSlKSEiwuLrolpSU1OZvB/r166f+/fvzNwUAAPxVnwzxLpdLDQ0Namho0MCBA0Om9aKriyLi7rvv1unTp7VixQq53W6NHTtWO3fubPPHrgj18ssvS5IKCgpCxm/YsEEPPPBAzxcEAAB6lV51TTwAAADQF3AhOAAAAGAYQjwAAABgGEI8AAAAYBhCPAAAAGAYQjwAAABgGEI8AAAAYBhCPAAAAGAYQjwAAABgGEI8AAAAYBhCPAAAAGAYQjwAAABgGEI8AAAAYJj/Hzs0cMbBOQdKAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 900x900 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df7.hist(figsize=(9, 9))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 实战项目"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分析目标"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "各城市对数据分析岗位的需求情况\n",
    "\n",
    "不同领域对数据分析岗的需求情况\n",
    "\n",
    "数据分析岗的薪资情况\n",
    "\n",
    "工作经验与薪水的关系\n",
    "\n",
    "技能要求\n",
    "\n",
    "学历要求\n",
    "\n",
    "工作经验要求及提供的薪资"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据加载"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(3683, 12)"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "job = pd.read_csv('./lagou2020.csv')\n",
    "job.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>positionName</th>\n",
       "      <th>companyShortName</th>\n",
       "      <th>city</th>\n",
       "      <th>companySize</th>\n",
       "      <th>education</th>\n",
       "      <th>financeStage</th>\n",
       "      <th>industryField</th>\n",
       "      <th>salary</th>\n",
       "      <th>workYear</th>\n",
       "      <th>hitags</th>\n",
       "      <th>companyLabelList</th>\n",
       "      <th>job_detail</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>高级数据分析师</td>\n",
       "      <td>拉勾网</td>\n",
       "      <td>北京</td>\n",
       "      <td>500-2000人</td>\n",
       "      <td>本科</td>\n",
       "      <td>D轮及以上</td>\n",
       "      <td>企业服务</td>\n",
       "      <td>25k-35k</td>\n",
       "      <td>5-10年</td>\n",
       "      <td>[\"免费下午茶\",\"ipo倒计时\",\"bat背景\",\"地铁周边\",\"每天管两餐\",\"定期团建...</td>\n",
       "      <td>[\"五险一金\",\"弹性工作\",\"带薪年假\",\"免费两餐\"]</td>\n",
       "      <td>\\n1.搭建数据指标框架，完整并准确反映业务趋势和变化，及时发现和定位问题\\n2.独立完成数...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>数据分析师</td>\n",
       "      <td>OK Group</td>\n",
       "      <td>北京</td>\n",
       "      <td>500-2000人</td>\n",
       "      <td>大专</td>\n",
       "      <td>B轮</td>\n",
       "      <td>金融</td>\n",
       "      <td>25k-45k</td>\n",
       "      <td>5-10年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"节日礼物\",\"年度旅游\",\"扁平管理\",\"领导好\"]</td>\n",
       "      <td>\\n工作职责：\\n1. 负责建立交易平台日常分析体系，包括核心指标体系、报表体系，专题活动分...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>高级数据分析师</td>\n",
       "      <td>金山办公软件</td>\n",
       "      <td>北京</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>本科</td>\n",
       "      <td>上市公司</td>\n",
       "      <td>移动互联网</td>\n",
       "      <td>15k-25k</td>\n",
       "      <td>3-5年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"年底双薪\",\"节日礼物\",\"技能培训\",\"绩效奖金\"]</td>\n",
       "      <td>\\n职位描述：1.对亿计的办公用户数据进行深度挖掘，引导产品、运营，并能实际应用到业务中带来...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>数据分析师</td>\n",
       "      <td>金山办公软件</td>\n",
       "      <td>北京</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>本科</td>\n",
       "      <td>上市公司</td>\n",
       "      <td>移动互联网</td>\n",
       "      <td>15k-25k</td>\n",
       "      <td>1-3年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"年底双薪\",\"节日礼物\",\"技能培训\",\"绩效奖金\"]</td>\n",
       "      <td>\\n工作职责：-负责日常运营、业务数据等分析-针对产品需求做深入的数据分析报告，分析用户行为...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>数据分析师</td>\n",
       "      <td>京东集团</td>\n",
       "      <td>北京</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>本科</td>\n",
       "      <td>上市公司</td>\n",
       "      <td>电商</td>\n",
       "      <td>15k-30k</td>\n",
       "      <td>3-5年</td>\n",
       "      <td>[\"免费班车\",\"免费体检\",\"地铁周边\"]</td>\n",
       "      <td>[\"五险一金\",\"带薪年假\",\"免费班车\",\"定期体检\"]</td>\n",
       "      <td>\\n【数据分析师岗】\\n岗位要求：\\n1、构建及维护客户体验相关数据报表平台；\\n2、与大数...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  positionName companyShortName city companySize education financeStage  \\\n",
       "0      高级数据分析师              拉勾网   北京   500-2000人        本科        D轮及以上   \n",
       "1        数据分析师         OK Group   北京   500-2000人        大专           B轮   \n",
       "2      高级数据分析师           金山办公软件   北京     2000人以上        本科         上市公司   \n",
       "3        数据分析师           金山办公软件   北京     2000人以上        本科         上市公司   \n",
       "4        数据分析师             京东集团   北京     2000人以上        本科         上市公司   \n",
       "\n",
       "  industryField   salary workYear  \\\n",
       "0          企业服务  25k-35k    5-10年   \n",
       "1            金融  25k-45k    5-10年   \n",
       "2         移动互联网  15k-25k     3-5年   \n",
       "3         移动互联网  15k-25k     1-3年   \n",
       "4            电商  15k-30k     3-5年   \n",
       "\n",
       "                                              hitags  \\\n",
       "0  [\"免费下午茶\",\"ipo倒计时\",\"bat背景\",\"地铁周边\",\"每天管两餐\",\"定期团建...   \n",
       "1                                                NaN   \n",
       "2                                                NaN   \n",
       "3                                                NaN   \n",
       "4                             [\"免费班车\",\"免费体检\",\"地铁周边\"]   \n",
       "\n",
       "                companyLabelList  \\\n",
       "0  [\"五险一金\",\"弹性工作\",\"带薪年假\",\"免费两餐\"]   \n",
       "1   [\"节日礼物\",\"年度旅游\",\"扁平管理\",\"领导好\"]   \n",
       "2  [\"年底双薪\",\"节日礼物\",\"技能培训\",\"绩效奖金\"]   \n",
       "3  [\"年底双薪\",\"节日礼物\",\"技能培训\",\"绩效奖金\"]   \n",
       "4  [\"五险一金\",\"带薪年假\",\"免费班车\",\"定期体检\"]   \n",
       "\n",
       "                                          job_detail  \n",
       "0  \\n1.搭建数据指标框架，完整并准确反映业务趋势和变化，及时发现和定位问题\\n2.独立完成数...  \n",
       "1  \\n工作职责：\\n1. 负责建立交易平台日常分析体系，包括核心指标体系、报表体系，专题活动分...  \n",
       "2  \\n职位描述：1.对亿计的办公用户数据进行深度挖掘，引导产品、运营，并能实际应用到业务中带来...  \n",
       "3  \\n工作职责：-负责日常运营、业务数据等分析-针对产品需求做深入的数据分析报告，分析用户行为...  \n",
       "4  \\n【数据分析师岗】\\n岗位要求：\\n1、构建及维护客户体验相关数据报表平台；\\n2、与大数...  "
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "job.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['北京', '上海', '深圳', '广州', '杭州', '成都', '南京', '武汉', '西安', '厦门', '长沙',\n",
       "       '苏州', '天津'], dtype=object)"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "job.city.unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [],
   "source": [
    "job.drop_duplicates(inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(3507, 12)"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "job.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "job.reset_index(inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>index</th>\n",
       "      <th>positionName</th>\n",
       "      <th>companyShortName</th>\n",
       "      <th>city</th>\n",
       "      <th>companySize</th>\n",
       "      <th>education</th>\n",
       "      <th>financeStage</th>\n",
       "      <th>industryField</th>\n",
       "      <th>salary</th>\n",
       "      <th>workYear</th>\n",
       "      <th>hitags</th>\n",
       "      <th>companyLabelList</th>\n",
       "      <th>job_detail</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>高级数据分析师</td>\n",
       "      <td>拉勾网</td>\n",
       "      <td>北京</td>\n",
       "      <td>500-2000人</td>\n",
       "      <td>本科</td>\n",
       "      <td>D轮及以上</td>\n",
       "      <td>企业服务</td>\n",
       "      <td>25k-35k</td>\n",
       "      <td>5-10年</td>\n",
       "      <td>[\"免费下午茶\",\"ipo倒计时\",\"bat背景\",\"地铁周边\",\"每天管两餐\",\"定期团建...</td>\n",
       "      <td>[\"五险一金\",\"弹性工作\",\"带薪年假\",\"免费两餐\"]</td>\n",
       "      <td>\\n1.搭建数据指标框架，完整并准确反映业务趋势和变化，及时发现和定位问题\\n2.独立完成数...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>数据分析师</td>\n",
       "      <td>OK Group</td>\n",
       "      <td>北京</td>\n",
       "      <td>500-2000人</td>\n",
       "      <td>大专</td>\n",
       "      <td>B轮</td>\n",
       "      <td>金融</td>\n",
       "      <td>25k-45k</td>\n",
       "      <td>5-10年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"节日礼物\",\"年度旅游\",\"扁平管理\",\"领导好\"]</td>\n",
       "      <td>\\n工作职责：\\n1. 负责建立交易平台日常分析体系，包括核心指标体系、报表体系，专题活动分...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>高级数据分析师</td>\n",
       "      <td>金山办公软件</td>\n",
       "      <td>北京</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>本科</td>\n",
       "      <td>上市公司</td>\n",
       "      <td>移动互联网</td>\n",
       "      <td>15k-25k</td>\n",
       "      <td>3-5年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"年底双薪\",\"节日礼物\",\"技能培训\",\"绩效奖金\"]</td>\n",
       "      <td>\\n职位描述：1.对亿计的办公用户数据进行深度挖掘，引导产品、运营，并能实际应用到业务中带来...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>数据分析师</td>\n",
       "      <td>金山办公软件</td>\n",
       "      <td>北京</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>本科</td>\n",
       "      <td>上市公司</td>\n",
       "      <td>移动互联网</td>\n",
       "      <td>15k-25k</td>\n",
       "      <td>1-3年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"年底双薪\",\"节日礼物\",\"技能培训\",\"绩效奖金\"]</td>\n",
       "      <td>\\n工作职责：-负责日常运营、业务数据等分析-针对产品需求做深入的数据分析报告，分析用户行为...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>数据分析师</td>\n",
       "      <td>京东集团</td>\n",
       "      <td>北京</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>本科</td>\n",
       "      <td>上市公司</td>\n",
       "      <td>电商</td>\n",
       "      <td>15k-30k</td>\n",
       "      <td>3-5年</td>\n",
       "      <td>[\"免费班车\",\"免费体检\",\"地铁周边\"]</td>\n",
       "      <td>[\"五险一金\",\"带薪年假\",\"免费班车\",\"定期体检\"]</td>\n",
       "      <td>\\n【数据分析师岗】\\n岗位要求：\\n1、构建及维护客户体验相关数据报表平台；\\n2、与大数...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3502</th>\n",
       "      <td>3678</td>\n",
       "      <td>内容运营高级经理-审核方向</td>\n",
       "      <td>字节跳动</td>\n",
       "      <td>天津</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>本科</td>\n",
       "      <td>C轮</td>\n",
       "      <td>文娱丨内容</td>\n",
       "      <td>20k-30k</td>\n",
       "      <td>不限</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"扁平管理\",\"弹性工作\",\"大厨定制三餐\",\"就近租房补贴\"]</td>\n",
       "      <td>\\n        职位职责：\\n1、负责字节跳动旗下产品图文类及小视频类内容的业务管理，对...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3503</th>\n",
       "      <td>3679</td>\n",
       "      <td>质检岗位基层管理岗</td>\n",
       "      <td>字节跳动</td>\n",
       "      <td>天津</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>本科</td>\n",
       "      <td>C轮</td>\n",
       "      <td>文娱丨内容</td>\n",
       "      <td>6k-10k</td>\n",
       "      <td>3-5年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"扁平管理\",\"弹性工作\",\"大厨定制三餐\",\"就近租房补贴\"]</td>\n",
       "      <td>\\n        职位职责：\\n1、负责对日常业务数据进行分析、挖掘潜在隐患风险、提出风险...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3504</th>\n",
       "      <td>3680</td>\n",
       "      <td>高级审核编辑</td>\n",
       "      <td>字节跳动</td>\n",
       "      <td>天津</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>本科</td>\n",
       "      <td>C轮</td>\n",
       "      <td>文娱丨内容</td>\n",
       "      <td>8k-12k</td>\n",
       "      <td>3-5年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"扁平管理\",\"弹性工作\",\"大厨定制三餐\",\"就近租房补贴\"]</td>\n",
       "      <td>\\n        职位职责：\\n1、根据审核标准，对自媒体发布的国内热点、新闻、优质内容做...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3505</th>\n",
       "      <td>3681</td>\n",
       "      <td>数据运营分析专员</td>\n",
       "      <td>字节跳动</td>\n",
       "      <td>天津</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>本科</td>\n",
       "      <td>C轮</td>\n",
       "      <td>文娱丨内容</td>\n",
       "      <td>6k-8k</td>\n",
       "      <td>3-5年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"扁平管理\",\"弹性工作\",\"大厨定制三餐\",\"就近租房补贴\"]</td>\n",
       "      <td>\\n        职位职责：\\n1、协助数据分析团队项目的测试及开展，了解公司各部门的组织...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3506</th>\n",
       "      <td>3682</td>\n",
       "      <td>数据运营分析实习生</td>\n",
       "      <td>字节跳动</td>\n",
       "      <td>天津</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>本科</td>\n",
       "      <td>C轮</td>\n",
       "      <td>文娱丨内容</td>\n",
       "      <td>2k-3k</td>\n",
       "      <td>不限</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"扁平管理\",\"弹性工作\",\"大厨定制三餐\",\"就近租房补贴\"]</td>\n",
       "      <td>\\n        职位职责：\\n1、协助数据分析团队项目的测试及开展，了解公司各部门的组织...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>3507 rows × 13 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      index   positionName companyShortName city companySize education  \\\n",
       "0         0        高级数据分析师              拉勾网   北京   500-2000人        本科   \n",
       "1         1          数据分析师         OK Group   北京   500-2000人        大专   \n",
       "2         2        高级数据分析师           金山办公软件   北京     2000人以上        本科   \n",
       "3         3          数据分析师           金山办公软件   北京     2000人以上        本科   \n",
       "4         4          数据分析师             京东集团   北京     2000人以上        本科   \n",
       "...     ...            ...              ...  ...         ...       ...   \n",
       "3502   3678  内容运营高级经理-审核方向             字节跳动   天津     2000人以上        本科   \n",
       "3503   3679      质检岗位基层管理岗             字节跳动   天津     2000人以上        本科   \n",
       "3504   3680         高级审核编辑             字节跳动   天津     2000人以上        本科   \n",
       "3505   3681       数据运营分析专员             字节跳动   天津     2000人以上        本科   \n",
       "3506   3682      数据运营分析实习生             字节跳动   天津     2000人以上        本科   \n",
       "\n",
       "     financeStage industryField   salary workYear  \\\n",
       "0           D轮及以上          企业服务  25k-35k    5-10年   \n",
       "1              B轮            金融  25k-45k    5-10年   \n",
       "2            上市公司         移动互联网  15k-25k     3-5年   \n",
       "3            上市公司         移动互联网  15k-25k     1-3年   \n",
       "4            上市公司            电商  15k-30k     3-5年   \n",
       "...           ...           ...      ...      ...   \n",
       "3502           C轮         文娱丨内容  20k-30k       不限   \n",
       "3503           C轮         文娱丨内容   6k-10k     3-5年   \n",
       "3504           C轮         文娱丨内容   8k-12k     3-5年   \n",
       "3505           C轮         文娱丨内容    6k-8k     3-5年   \n",
       "3506           C轮         文娱丨内容    2k-3k       不限   \n",
       "\n",
       "                                                 hitags  \\\n",
       "0     [\"免费下午茶\",\"ipo倒计时\",\"bat背景\",\"地铁周边\",\"每天管两餐\",\"定期团建...   \n",
       "1                                                   NaN   \n",
       "2                                                   NaN   \n",
       "3                                                   NaN   \n",
       "4                                [\"免费班车\",\"免费体检\",\"地铁周边\"]   \n",
       "...                                                 ...   \n",
       "3502                                                NaN   \n",
       "3503                                                NaN   \n",
       "3504                                                NaN   \n",
       "3505                                                NaN   \n",
       "3506                                                NaN   \n",
       "\n",
       "                       companyLabelList  \\\n",
       "0         [\"五险一金\",\"弹性工作\",\"带薪年假\",\"免费两餐\"]   \n",
       "1          [\"节日礼物\",\"年度旅游\",\"扁平管理\",\"领导好\"]   \n",
       "2         [\"年底双薪\",\"节日礼物\",\"技能培训\",\"绩效奖金\"]   \n",
       "3         [\"年底双薪\",\"节日礼物\",\"技能培训\",\"绩效奖金\"]   \n",
       "4         [\"五险一金\",\"带薪年假\",\"免费班车\",\"定期体检\"]   \n",
       "...                                 ...   \n",
       "3502  [\"扁平管理\",\"弹性工作\",\"大厨定制三餐\",\"就近租房补贴\"]   \n",
       "3503  [\"扁平管理\",\"弹性工作\",\"大厨定制三餐\",\"就近租房补贴\"]   \n",
       "3504  [\"扁平管理\",\"弹性工作\",\"大厨定制三餐\",\"就近租房补贴\"]   \n",
       "3505  [\"扁平管理\",\"弹性工作\",\"大厨定制三餐\",\"就近租房补贴\"]   \n",
       "3506  [\"扁平管理\",\"弹性工作\",\"大厨定制三餐\",\"就近租房补贴\"]   \n",
       "\n",
       "                                             job_detail  \n",
       "0     \\n1.搭建数据指标框架，完整并准确反映业务趋势和变化，及时发现和定位问题\\n2.独立完成数...  \n",
       "1     \\n工作职责：\\n1. 负责建立交易平台日常分析体系，包括核心指标体系、报表体系，专题活动分...  \n",
       "2     \\n职位描述：1.对亿计的办公用户数据进行深度挖掘，引导产品、运营，并能实际应用到业务中带来...  \n",
       "3     \\n工作职责：-负责日常运营、业务数据等分析-针对产品需求做深入的数据分析报告，分析用户行为...  \n",
       "4     \\n【数据分析师岗】\\n岗位要求：\\n1、构建及维护客户体验相关数据报表平台；\\n2、与大数...  \n",
       "...                                                 ...  \n",
       "3502  \\n        职位职责：\\n1、负责字节跳动旗下产品图文类及小视频类内容的业务管理，对...  \n",
       "3503  \\n        职位职责：\\n1、负责对日常业务数据进行分析、挖掘潜在隐患风险、提出风险...  \n",
       "3504  \\n        职位职责：\\n1、根据审核标准，对自媒体发布的国内热点、新闻、优质内容做...  \n",
       "3505  \\n        职位职责：\\n1、协助数据分析团队项目的测试及开展，了解公司各部门的组织...  \n",
       "3506  \\n        职位职责：\\n1、协助数据分析团队项目的测试及开展，了解公司各部门的组织...  \n",
       "\n",
       "[3507 rows x 13 columns]"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "job"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据清洗"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0        True\n",
       "1        True\n",
       "2        True\n",
       "3        True\n",
       "4        True\n",
       "        ...  \n",
       "3502    False\n",
       "3503    False\n",
       "3504    False\n",
       "3505    False\n",
       "3506    False\n",
       "Name: positionName, Length: 3507, dtype: bool"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 过滤非数据分析岗\n",
    "cond = job['positionName'].str.contains('数据分析')\n",
    "cond"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "job = job[cond]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1652, 13)"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "job.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [],
   "source": [
    "job.reset_index(inplace=True) # 重置行索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>level_0</th>\n",
       "      <th>index</th>\n",
       "      <th>positionName</th>\n",
       "      <th>companyShortName</th>\n",
       "      <th>city</th>\n",
       "      <th>companySize</th>\n",
       "      <th>education</th>\n",
       "      <th>financeStage</th>\n",
       "      <th>industryField</th>\n",
       "      <th>salary</th>\n",
       "      <th>workYear</th>\n",
       "      <th>hitags</th>\n",
       "      <th>companyLabelList</th>\n",
       "      <th>job_detail</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>高级数据分析师</td>\n",
       "      <td>拉勾网</td>\n",
       "      <td>北京</td>\n",
       "      <td>500-2000人</td>\n",
       "      <td>本科</td>\n",
       "      <td>D轮及以上</td>\n",
       "      <td>企业服务</td>\n",
       "      <td>25k-35k</td>\n",
       "      <td>5-10年</td>\n",
       "      <td>[\"免费下午茶\",\"ipo倒计时\",\"bat背景\",\"地铁周边\",\"每天管两餐\",\"定期团建...</td>\n",
       "      <td>[\"五险一金\",\"弹性工作\",\"带薪年假\",\"免费两餐\"]</td>\n",
       "      <td>\\n1.搭建数据指标框架，完整并准确反映业务趋势和变化，及时发现和定位问题\\n2.独立完成数...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>数据分析师</td>\n",
       "      <td>OK Group</td>\n",
       "      <td>北京</td>\n",
       "      <td>500-2000人</td>\n",
       "      <td>大专</td>\n",
       "      <td>B轮</td>\n",
       "      <td>金融</td>\n",
       "      <td>25k-45k</td>\n",
       "      <td>5-10年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"节日礼物\",\"年度旅游\",\"扁平管理\",\"领导好\"]</td>\n",
       "      <td>\\n工作职责：\\n1. 负责建立交易平台日常分析体系，包括核心指标体系、报表体系，专题活动分...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>高级数据分析师</td>\n",
       "      <td>金山办公软件</td>\n",
       "      <td>北京</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>本科</td>\n",
       "      <td>上市公司</td>\n",
       "      <td>移动互联网</td>\n",
       "      <td>15k-25k</td>\n",
       "      <td>3-5年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"年底双薪\",\"节日礼物\",\"技能培训\",\"绩效奖金\"]</td>\n",
       "      <td>\\n职位描述：1.对亿计的办公用户数据进行深度挖掘，引导产品、运营，并能实际应用到业务中带来...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>数据分析师</td>\n",
       "      <td>金山办公软件</td>\n",
       "      <td>北京</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>本科</td>\n",
       "      <td>上市公司</td>\n",
       "      <td>移动互联网</td>\n",
       "      <td>15k-25k</td>\n",
       "      <td>1-3年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"年底双薪\",\"节日礼物\",\"技能培训\",\"绩效奖金\"]</td>\n",
       "      <td>\\n工作职责：-负责日常运营、业务数据等分析-针对产品需求做深入的数据分析报告，分析用户行为...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>4</td>\n",
       "      <td>数据分析师</td>\n",
       "      <td>京东集团</td>\n",
       "      <td>北京</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>本科</td>\n",
       "      <td>上市公司</td>\n",
       "      <td>电商</td>\n",
       "      <td>15k-30k</td>\n",
       "      <td>3-5年</td>\n",
       "      <td>[\"免费班车\",\"免费体检\",\"地铁周边\"]</td>\n",
       "      <td>[\"五险一金\",\"带薪年假\",\"免费班车\",\"定期体检\"]</td>\n",
       "      <td>\\n【数据分析师岗】\\n岗位要求：\\n1、构建及维护客户体验相关数据报表平台；\\n2、与大数...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1647</th>\n",
       "      <td>3177</td>\n",
       "      <td>3352</td>\n",
       "      <td>数据分析师</td>\n",
       "      <td>华泛信息</td>\n",
       "      <td>苏州</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>大专</td>\n",
       "      <td>不需要融资</td>\n",
       "      <td>移动互联网,其他</td>\n",
       "      <td>10k-15k</td>\n",
       "      <td>1-3年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"技能培训\",\"节日礼物\",\"带薪年假\",\"绩效奖金\"]</td>\n",
       "      <td>\\n岗位职责：\\n深入了解项目组的业务需求,在此基础上进行数据收集、数据分析、商业报告的撰写...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1648</th>\n",
       "      <td>3178</td>\n",
       "      <td>3353</td>\n",
       "      <td>大数据分析师</td>\n",
       "      <td>德融嘉信</td>\n",
       "      <td>苏州</td>\n",
       "      <td>50-150人</td>\n",
       "      <td>本科</td>\n",
       "      <td>不需要融资</td>\n",
       "      <td>移动互联网</td>\n",
       "      <td>6k-12k</td>\n",
       "      <td>1-3年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[]</td>\n",
       "      <td>\\n岗位职责：\\n1. 开展业务专题分析，使用数据挖掘各类算法构建相关的业务模型，完成业务分...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1649</th>\n",
       "      <td>3404</td>\n",
       "      <td>3580</td>\n",
       "      <td>ETL/大数据/数据分析/实施</td>\n",
       "      <td>格蒂电力</td>\n",
       "      <td>天津</td>\n",
       "      <td>500-2000人</td>\n",
       "      <td>大专</td>\n",
       "      <td>未融资</td>\n",
       "      <td>企业服务</td>\n",
       "      <td>6k-12k</td>\n",
       "      <td>3-5年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"技能培训\",\"带薪年假\",\"绩效奖金\",\"岗位晋升\"]</td>\n",
       "      <td>\\n工作职责\\n1.   负责数据接入、数据整合中的链路配置与调度配置工作。\\n职位要求\\n...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1650</th>\n",
       "      <td>3405</td>\n",
       "      <td>3581</td>\n",
       "      <td>数据分析师</td>\n",
       "      <td>吉城美家</td>\n",
       "      <td>天津</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>本科</td>\n",
       "      <td>未融资</td>\n",
       "      <td>移动互联网</td>\n",
       "      <td>7k-14k</td>\n",
       "      <td>1-3年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"五险一金\",\"岗位晋升\"]</td>\n",
       "      <td>\\n负责站点日常数据分析、提前通过数据分析对业务有预测性、通过数据说话、解决站点管理问题、\\n</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1651</th>\n",
       "      <td>3406</td>\n",
       "      <td>3582</td>\n",
       "      <td>数据分析支持</td>\n",
       "      <td>云链供应链</td>\n",
       "      <td>天津</td>\n",
       "      <td>15-50人</td>\n",
       "      <td>本科</td>\n",
       "      <td>未融资</td>\n",
       "      <td>金融,企业服务</td>\n",
       "      <td>4k-6k</td>\n",
       "      <td>1-3年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[]</td>\n",
       "      <td>\\n        岗位职责：\\n1、负责部门日常数据报表的制定、维护、优化；\\n2、支持运...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1652 rows × 14 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      level_0  index     positionName companyShortName city companySize  \\\n",
       "0           0      0          高级数据分析师              拉勾网   北京   500-2000人   \n",
       "1           1      1            数据分析师         OK Group   北京   500-2000人   \n",
       "2           2      2          高级数据分析师           金山办公软件   北京     2000人以上   \n",
       "3           3      3            数据分析师           金山办公软件   北京     2000人以上   \n",
       "4           4      4            数据分析师             京东集团   北京     2000人以上   \n",
       "...       ...    ...              ...              ...  ...         ...   \n",
       "1647     3177   3352            数据分析师             华泛信息   苏州     2000人以上   \n",
       "1648     3178   3353           大数据分析师             德融嘉信   苏州     50-150人   \n",
       "1649     3404   3580  ETL/大数据/数据分析/实施             格蒂电力   天津   500-2000人   \n",
       "1650     3405   3581            数据分析师             吉城美家   天津     2000人以上   \n",
       "1651     3406   3582           数据分析支持            云链供应链   天津      15-50人   \n",
       "\n",
       "     education financeStage industryField   salary workYear  \\\n",
       "0           本科        D轮及以上          企业服务  25k-35k    5-10年   \n",
       "1           大专           B轮            金融  25k-45k    5-10年   \n",
       "2           本科         上市公司         移动互联网  15k-25k     3-5年   \n",
       "3           本科         上市公司         移动互联网  15k-25k     1-3年   \n",
       "4           本科         上市公司            电商  15k-30k     3-5年   \n",
       "...        ...          ...           ...      ...      ...   \n",
       "1647        大专        不需要融资      移动互联网,其他  10k-15k     1-3年   \n",
       "1648        本科        不需要融资         移动互联网   6k-12k     1-3年   \n",
       "1649        大专          未融资          企业服务   6k-12k     3-5年   \n",
       "1650        本科          未融资         移动互联网   7k-14k     1-3年   \n",
       "1651        本科          未融资       金融,企业服务    4k-6k     1-3年   \n",
       "\n",
       "                                                 hitags  \\\n",
       "0     [\"免费下午茶\",\"ipo倒计时\",\"bat背景\",\"地铁周边\",\"每天管两餐\",\"定期团建...   \n",
       "1                                                   NaN   \n",
       "2                                                   NaN   \n",
       "3                                                   NaN   \n",
       "4                                [\"免费班车\",\"免费体检\",\"地铁周边\"]   \n",
       "...                                                 ...   \n",
       "1647                                                NaN   \n",
       "1648                                                NaN   \n",
       "1649                                                NaN   \n",
       "1650                                                NaN   \n",
       "1651                                                NaN   \n",
       "\n",
       "                   companyLabelList  \\\n",
       "0     [\"五险一金\",\"弹性工作\",\"带薪年假\",\"免费两餐\"]   \n",
       "1      [\"节日礼物\",\"年度旅游\",\"扁平管理\",\"领导好\"]   \n",
       "2     [\"年底双薪\",\"节日礼物\",\"技能培训\",\"绩效奖金\"]   \n",
       "3     [\"年底双薪\",\"节日礼物\",\"技能培训\",\"绩效奖金\"]   \n",
       "4     [\"五险一金\",\"带薪年假\",\"免费班车\",\"定期体检\"]   \n",
       "...                             ...   \n",
       "1647  [\"技能培训\",\"节日礼物\",\"带薪年假\",\"绩效奖金\"]   \n",
       "1648                             []   \n",
       "1649  [\"技能培训\",\"带薪年假\",\"绩效奖金\",\"岗位晋升\"]   \n",
       "1650                [\"五险一金\",\"岗位晋升\"]   \n",
       "1651                             []   \n",
       "\n",
       "                                             job_detail  \n",
       "0     \\n1.搭建数据指标框架，完整并准确反映业务趋势和变化，及时发现和定位问题\\n2.独立完成数...  \n",
       "1     \\n工作职责：\\n1. 负责建立交易平台日常分析体系，包括核心指标体系、报表体系，专题活动分...  \n",
       "2     \\n职位描述：1.对亿计的办公用户数据进行深度挖掘，引导产品、运营，并能实际应用到业务中带来...  \n",
       "3     \\n工作职责：-负责日常运营、业务数据等分析-针对产品需求做深入的数据分析报告，分析用户行为...  \n",
       "4     \\n【数据分析师岗】\\n岗位要求：\\n1、构建及维护客户体验相关数据报表平台；\\n2、与大数...  \n",
       "...                                                 ...  \n",
       "1647  \\n岗位职责：\\n深入了解项目组的业务需求,在此基础上进行数据收集、数据分析、商业报告的撰写...  \n",
       "1648  \\n岗位职责：\\n1. 开展业务专题分析，使用数据挖掘各类算法构建相关的业务模型，完成业务分...  \n",
       "1649  \\n工作职责\\n1.   负责数据接入、数据整合中的链路配置与调度配置工作。\\n职位要求\\n...  \n",
       "1650    \\n负责站点日常数据分析、提前通过数据分析对业务有预测性、通过数据说话、解决站点管理问题、\\n  \n",
       "1651  \\n        岗位职责：\\n1、负责部门日常数据报表的制定、维护、优化；\\n2、支持运...  \n",
       "\n",
       "[1652 rows x 14 columns]"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "job"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0       30.0\n",
       "1       35.0\n",
       "2       20.0\n",
       "3       20.0\n",
       "4       22.5\n",
       "        ... \n",
       "1647    12.5\n",
       "1648     9.0\n",
       "1649     9.0\n",
       "1650    10.5\n",
       "1651     5.0\n",
       "Length: 1652, dtype: float64"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 薪水处理\n",
    "# applymap和map类似，map是series的，applymap是dataframe的\n",
    "job['salary'].str.lower().str.extract(r'(\\d+)[k]-(\\d+)[k]').applymap(lambda x: int(x)).mean(axis=1)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "技能要求\n",
    "\n",
    "Python\n",
    "\n",
    "SQL\n",
    "\n",
    "Tableau\n",
    "\n",
    "Excel\n",
    "\n",
    "SPSS/SAS"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/g_/dxml3hms52dfwqrcbt4fdmtw0000gn/T/ipykernel_17368/302641233.py:1: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  job['job_detail'] = job['job_detail'].str.lower()\n"
     ]
    }
   ],
   "source": [
    "job['job_detail'] = job['job_detail'].str.lower()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/g_/dxml3hms52dfwqrcbt4fdmtw0000gn/T/ipykernel_17368/4260350920.py:1: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  job['Python'] = job['job_detail'].map(lambda x: 1 if 'python' in x else 0)\n",
      "/var/folders/g_/dxml3hms52dfwqrcbt4fdmtw0000gn/T/ipykernel_17368/4260350920.py:2: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  job['SQL'] = job['job_detail'].map(lambda x: 1 if 'sql' in x else 0)\n",
      "/var/folders/g_/dxml3hms52dfwqrcbt4fdmtw0000gn/T/ipykernel_17368/4260350920.py:3: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  job['Tableau'] = job['job_detail'].map(lambda x: 1 if 'tableau' in x else 0)\n",
      "/var/folders/g_/dxml3hms52dfwqrcbt4fdmtw0000gn/T/ipykernel_17368/4260350920.py:4: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  job['Excel'] = job['job_detail'].map(lambda x: 1 if 'excel' in x else 0)\n",
      "/var/folders/g_/dxml3hms52dfwqrcbt4fdmtw0000gn/T/ipykernel_17368/4260350920.py:5: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  job['SPSS/SAS'] = job['job_detail'].map(lambda x: 1 if ('spss' in x) or ('sas' in x) else 0)\n"
     ]
    }
   ],
   "source": [
    "job['Python'] = job['job_detail'].map(lambda x: 1 if 'python' in x else 0)\n",
    "job['SQL'] = job['job_detail'].map(lambda x: 1 if 'sql' in x else 0)\n",
    "job['Tableau'] = job['job_detail'].map(lambda x: 1 if 'tableau' in x else 0)\n",
    "job['Excel'] = job['job_detail'].map(lambda x: 1 if 'excel' in x else 0)\n",
    "job['SPSS/SAS'] = job['job_detail'].map(lambda x: 1 if ('spss' in x) or ('sas' in x) else 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>level_0</th>\n",
       "      <th>index</th>\n",
       "      <th>positionName</th>\n",
       "      <th>companyShortName</th>\n",
       "      <th>city</th>\n",
       "      <th>companySize</th>\n",
       "      <th>education</th>\n",
       "      <th>financeStage</th>\n",
       "      <th>industryField</th>\n",
       "      <th>salary</th>\n",
       "      <th>workYear</th>\n",
       "      <th>hitags</th>\n",
       "      <th>companyLabelList</th>\n",
       "      <th>job_detail</th>\n",
       "      <th>Python</th>\n",
       "      <th>SQL</th>\n",
       "      <th>Tableau</th>\n",
       "      <th>Excel</th>\n",
       "      <th>SPSS/SAS</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>高级数据分析师</td>\n",
       "      <td>拉勾网</td>\n",
       "      <td>北京</td>\n",
       "      <td>500-2000人</td>\n",
       "      <td>本科</td>\n",
       "      <td>D轮及以上</td>\n",
       "      <td>企业服务</td>\n",
       "      <td>25k-35k</td>\n",
       "      <td>5-10年</td>\n",
       "      <td>[\"免费下午茶\",\"ipo倒计时\",\"bat背景\",\"地铁周边\",\"每天管两餐\",\"定期团建...</td>\n",
       "      <td>[\"五险一金\",\"弹性工作\",\"带薪年假\",\"免费两餐\"]</td>\n",
       "      <td>\\n1.搭建数据指标框架，完整并准确反映业务趋势和变化，及时发现和定位问题\\n2.独立完成数...</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>数据分析师</td>\n",
       "      <td>OK Group</td>\n",
       "      <td>北京</td>\n",
       "      <td>500-2000人</td>\n",
       "      <td>大专</td>\n",
       "      <td>B轮</td>\n",
       "      <td>金融</td>\n",
       "      <td>25k-45k</td>\n",
       "      <td>5-10年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"节日礼物\",\"年度旅游\",\"扁平管理\",\"领导好\"]</td>\n",
       "      <td>\\n工作职责：\\n1. 负责建立交易平台日常分析体系，包括核心指标体系、报表体系，专题活动分...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>高级数据分析师</td>\n",
       "      <td>金山办公软件</td>\n",
       "      <td>北京</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>本科</td>\n",
       "      <td>上市公司</td>\n",
       "      <td>移动互联网</td>\n",
       "      <td>15k-25k</td>\n",
       "      <td>3-5年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"年底双薪\",\"节日礼物\",\"技能培训\",\"绩效奖金\"]</td>\n",
       "      <td>\\n职位描述：1.对亿计的办公用户数据进行深度挖掘，引导产品、运营，并能实际应用到业务中带来...</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>数据分析师</td>\n",
       "      <td>金山办公软件</td>\n",
       "      <td>北京</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>本科</td>\n",
       "      <td>上市公司</td>\n",
       "      <td>移动互联网</td>\n",
       "      <td>15k-25k</td>\n",
       "      <td>1-3年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"年底双薪\",\"节日礼物\",\"技能培训\",\"绩效奖金\"]</td>\n",
       "      <td>\\n工作职责：-负责日常运营、业务数据等分析-针对产品需求做深入的数据分析报告，分析用户行为...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>4</td>\n",
       "      <td>数据分析师</td>\n",
       "      <td>京东集团</td>\n",
       "      <td>北京</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>本科</td>\n",
       "      <td>上市公司</td>\n",
       "      <td>电商</td>\n",
       "      <td>15k-30k</td>\n",
       "      <td>3-5年</td>\n",
       "      <td>[\"免费班车\",\"免费体检\",\"地铁周边\"]</td>\n",
       "      <td>[\"五险一金\",\"带薪年假\",\"免费班车\",\"定期体检\"]</td>\n",
       "      <td>\\n【数据分析师岗】\\n岗位要求：\\n1、构建及维护客户体验相关数据报表平台；\\n2、与大数...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1647</th>\n",
       "      <td>3177</td>\n",
       "      <td>3352</td>\n",
       "      <td>数据分析师</td>\n",
       "      <td>华泛信息</td>\n",
       "      <td>苏州</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>大专</td>\n",
       "      <td>不需要融资</td>\n",
       "      <td>移动互联网,其他</td>\n",
       "      <td>10k-15k</td>\n",
       "      <td>1-3年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"技能培训\",\"节日礼物\",\"带薪年假\",\"绩效奖金\"]</td>\n",
       "      <td>\\n岗位职责：\\n深入了解项目组的业务需求,在此基础上进行数据收集、数据分析、商业报告的撰写...</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1648</th>\n",
       "      <td>3178</td>\n",
       "      <td>3353</td>\n",
       "      <td>大数据分析师</td>\n",
       "      <td>德融嘉信</td>\n",
       "      <td>苏州</td>\n",
       "      <td>50-150人</td>\n",
       "      <td>本科</td>\n",
       "      <td>不需要融资</td>\n",
       "      <td>移动互联网</td>\n",
       "      <td>6k-12k</td>\n",
       "      <td>1-3年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[]</td>\n",
       "      <td>\\n岗位职责：\\n1. 开展业务专题分析，使用数据挖掘各类算法构建相关的业务模型，完成业务分...</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1649</th>\n",
       "      <td>3404</td>\n",
       "      <td>3580</td>\n",
       "      <td>ETL/大数据/数据分析/实施</td>\n",
       "      <td>格蒂电力</td>\n",
       "      <td>天津</td>\n",
       "      <td>500-2000人</td>\n",
       "      <td>大专</td>\n",
       "      <td>未融资</td>\n",
       "      <td>企业服务</td>\n",
       "      <td>6k-12k</td>\n",
       "      <td>3-5年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"技能培训\",\"带薪年假\",\"绩效奖金\",\"岗位晋升\"]</td>\n",
       "      <td>\\n工作职责\\n1.   负责数据接入、数据整合中的链路配置与调度配置工作。\\n职位要求\\n...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1650</th>\n",
       "      <td>3405</td>\n",
       "      <td>3581</td>\n",
       "      <td>数据分析师</td>\n",
       "      <td>吉城美家</td>\n",
       "      <td>天津</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>本科</td>\n",
       "      <td>未融资</td>\n",
       "      <td>移动互联网</td>\n",
       "      <td>7k-14k</td>\n",
       "      <td>1-3年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"五险一金\",\"岗位晋升\"]</td>\n",
       "      <td>\\n负责站点日常数据分析、提前通过数据分析对业务有预测性、通过数据说话、解决站点管理问题、\\n</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1651</th>\n",
       "      <td>3406</td>\n",
       "      <td>3582</td>\n",
       "      <td>数据分析支持</td>\n",
       "      <td>云链供应链</td>\n",
       "      <td>天津</td>\n",
       "      <td>15-50人</td>\n",
       "      <td>本科</td>\n",
       "      <td>未融资</td>\n",
       "      <td>金融,企业服务</td>\n",
       "      <td>4k-6k</td>\n",
       "      <td>1-3年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[]</td>\n",
       "      <td>\\n        岗位职责：\\n1、负责部门日常数据报表的制定、维护、优化；\\n2、支持运...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1652 rows × 19 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      level_0  index     positionName companyShortName city companySize  \\\n",
       "0           0      0          高级数据分析师              拉勾网   北京   500-2000人   \n",
       "1           1      1            数据分析师         OK Group   北京   500-2000人   \n",
       "2           2      2          高级数据分析师           金山办公软件   北京     2000人以上   \n",
       "3           3      3            数据分析师           金山办公软件   北京     2000人以上   \n",
       "4           4      4            数据分析师             京东集团   北京     2000人以上   \n",
       "...       ...    ...              ...              ...  ...         ...   \n",
       "1647     3177   3352            数据分析师             华泛信息   苏州     2000人以上   \n",
       "1648     3178   3353           大数据分析师             德融嘉信   苏州     50-150人   \n",
       "1649     3404   3580  ETL/大数据/数据分析/实施             格蒂电力   天津   500-2000人   \n",
       "1650     3405   3581            数据分析师             吉城美家   天津     2000人以上   \n",
       "1651     3406   3582           数据分析支持            云链供应链   天津      15-50人   \n",
       "\n",
       "     education financeStage industryField   salary workYear  \\\n",
       "0           本科        D轮及以上          企业服务  25k-35k    5-10年   \n",
       "1           大专           B轮            金融  25k-45k    5-10年   \n",
       "2           本科         上市公司         移动互联网  15k-25k     3-5年   \n",
       "3           本科         上市公司         移动互联网  15k-25k     1-3年   \n",
       "4           本科         上市公司            电商  15k-30k     3-5年   \n",
       "...        ...          ...           ...      ...      ...   \n",
       "1647        大专        不需要融资      移动互联网,其他  10k-15k     1-3年   \n",
       "1648        本科        不需要融资         移动互联网   6k-12k     1-3年   \n",
       "1649        大专          未融资          企业服务   6k-12k     3-5年   \n",
       "1650        本科          未融资         移动互联网   7k-14k     1-3年   \n",
       "1651        本科          未融资       金融,企业服务    4k-6k     1-3年   \n",
       "\n",
       "                                                 hitags  \\\n",
       "0     [\"免费下午茶\",\"ipo倒计时\",\"bat背景\",\"地铁周边\",\"每天管两餐\",\"定期团建...   \n",
       "1                                                   NaN   \n",
       "2                                                   NaN   \n",
       "3                                                   NaN   \n",
       "4                                [\"免费班车\",\"免费体检\",\"地铁周边\"]   \n",
       "...                                                 ...   \n",
       "1647                                                NaN   \n",
       "1648                                                NaN   \n",
       "1649                                                NaN   \n",
       "1650                                                NaN   \n",
       "1651                                                NaN   \n",
       "\n",
       "                   companyLabelList  \\\n",
       "0     [\"五险一金\",\"弹性工作\",\"带薪年假\",\"免费两餐\"]   \n",
       "1      [\"节日礼物\",\"年度旅游\",\"扁平管理\",\"领导好\"]   \n",
       "2     [\"年底双薪\",\"节日礼物\",\"技能培训\",\"绩效奖金\"]   \n",
       "3     [\"年底双薪\",\"节日礼物\",\"技能培训\",\"绩效奖金\"]   \n",
       "4     [\"五险一金\",\"带薪年假\",\"免费班车\",\"定期体检\"]   \n",
       "...                             ...   \n",
       "1647  [\"技能培训\",\"节日礼物\",\"带薪年假\",\"绩效奖金\"]   \n",
       "1648                             []   \n",
       "1649  [\"技能培训\",\"带薪年假\",\"绩效奖金\",\"岗位晋升\"]   \n",
       "1650                [\"五险一金\",\"岗位晋升\"]   \n",
       "1651                             []   \n",
       "\n",
       "                                             job_detail  Python  SQL  Tableau  \\\n",
       "0     \\n1.搭建数据指标框架，完整并准确反映业务趋势和变化，及时发现和定位问题\\n2.独立完成数...       1    1        0   \n",
       "1     \\n工作职责：\\n1. 负责建立交易平台日常分析体系，包括核心指标体系、报表体系，专题活动分...       0    1        0   \n",
       "2     \\n职位描述：1.对亿计的办公用户数据进行深度挖掘，引导产品、运营，并能实际应用到业务中带来...       1    1        0   \n",
       "3     \\n工作职责：-负责日常运营、业务数据等分析-针对产品需求做深入的数据分析报告，分析用户行为...       0    1        0   \n",
       "4     \\n【数据分析师岗】\\n岗位要求：\\n1、构建及维护客户体验相关数据报表平台；\\n2、与大数...       0    1        1   \n",
       "...                                                 ...     ...  ...      ...   \n",
       "1647  \\n岗位职责：\\n深入了解项目组的业务需求,在此基础上进行数据收集、数据分析、商业报告的撰写...       1    1        0   \n",
       "1648  \\n岗位职责：\\n1. 开展业务专题分析，使用数据挖掘各类算法构建相关的业务模型，完成业务分...       1    1        0   \n",
       "1649  \\n工作职责\\n1.   负责数据接入、数据整合中的链路配置与调度配置工作。\\n职位要求\\n...       0    1        0   \n",
       "1650    \\n负责站点日常数据分析、提前通过数据分析对业务有预测性、通过数据说话、解决站点管理问题、\\n       0    0        0   \n",
       "1651  \\n        岗位职责：\\n1、负责部门日常数据报表的制定、维护、优化；\\n2、支持运...       0    0        0   \n",
       "\n",
       "      Excel  SPSS/SAS  \n",
       "0         0         0  \n",
       "1         0         0  \n",
       "2         0         0  \n",
       "3         0         1  \n",
       "4         1         1  \n",
       "...     ...       ...  \n",
       "1647      1         0  \n",
       "1648      1         1  \n",
       "1649      0         0  \n",
       "1650      0         0  \n",
       "1651      0         0  \n",
       "\n",
       "[1652 rows x 19 columns]"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "job"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "行业信息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0           企业服务\n",
       "1             金融\n",
       "2          移动互联网\n",
       "3          移动互联网\n",
       "4             电商\n",
       "          ...   \n",
       "1647    移动互联网,其他\n",
       "1648       移动互联网\n",
       "1649        企业服务\n",
       "1650       移动互联网\n",
       "1651     金融,企业服务\n",
       "Name: industryField, Length: 1652, dtype: object"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "job['industryField']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/g_/dxml3hms52dfwqrcbt4fdmtw0000gn/T/ipykernel_17368/110833886.py:9: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  job['industryField'] = job.industryField.map(convert)\n"
     ]
    }
   ],
   "source": [
    "def convert(x):\n",
    "    field = x.split(',')\n",
    "    if (field[0] == '移动互联网') & (len(field) > 1):\n",
    "        return field[1]\n",
    "    else:\n",
    "        return field[0]\n",
    "\n",
    "\n",
    "job['industryField'] = job.industryField.map(convert)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0        企业服务\n",
       "1          金融\n",
       "2       移动互联网\n",
       "3       移动互联网\n",
       "4          电商\n",
       "        ...  \n",
       "1647       其他\n",
       "1648    移动互联网\n",
       "1649     企业服务\n",
       "1650    移动互联网\n",
       "1651       金融\n",
       "Name: industryField, Length: 1652, dtype: object"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "job['industryField']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>level_0</th>\n",
       "      <th>index</th>\n",
       "      <th>positionName</th>\n",
       "      <th>companyShortName</th>\n",
       "      <th>city</th>\n",
       "      <th>companySize</th>\n",
       "      <th>education</th>\n",
       "      <th>financeStage</th>\n",
       "      <th>industryField</th>\n",
       "      <th>salary</th>\n",
       "      <th>workYear</th>\n",
       "      <th>hitags</th>\n",
       "      <th>companyLabelList</th>\n",
       "      <th>job_detail</th>\n",
       "      <th>Python</th>\n",
       "      <th>SQL</th>\n",
       "      <th>Tableau</th>\n",
       "      <th>Excel</th>\n",
       "      <th>SPSS/SAS</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>高级数据分析师</td>\n",
       "      <td>拉勾网</td>\n",
       "      <td>北京</td>\n",
       "      <td>500-2000人</td>\n",
       "      <td>本科</td>\n",
       "      <td>D轮及以上</td>\n",
       "      <td>企业服务</td>\n",
       "      <td>25k-35k</td>\n",
       "      <td>5-10年</td>\n",
       "      <td>[\"免费下午茶\",\"ipo倒计时\",\"bat背景\",\"地铁周边\",\"每天管两餐\",\"定期团建...</td>\n",
       "      <td>[\"五险一金\",\"弹性工作\",\"带薪年假\",\"免费两餐\"]</td>\n",
       "      <td>\\n1.搭建数据指标框架，完整并准确反映业务趋势和变化，及时发现和定位问题\\n2.独立完成数...</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>数据分析师</td>\n",
       "      <td>OK Group</td>\n",
       "      <td>北京</td>\n",
       "      <td>500-2000人</td>\n",
       "      <td>大专</td>\n",
       "      <td>B轮</td>\n",
       "      <td>金融</td>\n",
       "      <td>25k-45k</td>\n",
       "      <td>5-10年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"节日礼物\",\"年度旅游\",\"扁平管理\",\"领导好\"]</td>\n",
       "      <td>\\n工作职责：\\n1. 负责建立交易平台日常分析体系，包括核心指标体系、报表体系，专题活动分...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>高级数据分析师</td>\n",
       "      <td>金山办公软件</td>\n",
       "      <td>北京</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>本科</td>\n",
       "      <td>上市公司</td>\n",
       "      <td>移动互联网</td>\n",
       "      <td>15k-25k</td>\n",
       "      <td>3-5年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"年底双薪\",\"节日礼物\",\"技能培训\",\"绩效奖金\"]</td>\n",
       "      <td>\\n职位描述：1.对亿计的办公用户数据进行深度挖掘，引导产品、运营，并能实际应用到业务中带来...</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>数据分析师</td>\n",
       "      <td>金山办公软件</td>\n",
       "      <td>北京</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>本科</td>\n",
       "      <td>上市公司</td>\n",
       "      <td>移动互联网</td>\n",
       "      <td>15k-25k</td>\n",
       "      <td>1-3年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"年底双薪\",\"节日礼物\",\"技能培训\",\"绩效奖金\"]</td>\n",
       "      <td>\\n工作职责：-负责日常运营、业务数据等分析-针对产品需求做深入的数据分析报告，分析用户行为...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>4</td>\n",
       "      <td>数据分析师</td>\n",
       "      <td>京东集团</td>\n",
       "      <td>北京</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>本科</td>\n",
       "      <td>上市公司</td>\n",
       "      <td>电商</td>\n",
       "      <td>15k-30k</td>\n",
       "      <td>3-5年</td>\n",
       "      <td>[\"免费班车\",\"免费体检\",\"地铁周边\"]</td>\n",
       "      <td>[\"五险一金\",\"带薪年假\",\"免费班车\",\"定期体检\"]</td>\n",
       "      <td>\\n【数据分析师岗】\\n岗位要求：\\n1、构建及维护客户体验相关数据报表平台；\\n2、与大数...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1647</th>\n",
       "      <td>3177</td>\n",
       "      <td>3352</td>\n",
       "      <td>数据分析师</td>\n",
       "      <td>华泛信息</td>\n",
       "      <td>苏州</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>大专</td>\n",
       "      <td>不需要融资</td>\n",
       "      <td>其他</td>\n",
       "      <td>10k-15k</td>\n",
       "      <td>1-3年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"技能培训\",\"节日礼物\",\"带薪年假\",\"绩效奖金\"]</td>\n",
       "      <td>\\n岗位职责：\\n深入了解项目组的业务需求,在此基础上进行数据收集、数据分析、商业报告的撰写...</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1648</th>\n",
       "      <td>3178</td>\n",
       "      <td>3353</td>\n",
       "      <td>大数据分析师</td>\n",
       "      <td>德融嘉信</td>\n",
       "      <td>苏州</td>\n",
       "      <td>50-150人</td>\n",
       "      <td>本科</td>\n",
       "      <td>不需要融资</td>\n",
       "      <td>移动互联网</td>\n",
       "      <td>6k-12k</td>\n",
       "      <td>1-3年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[]</td>\n",
       "      <td>\\n岗位职责：\\n1. 开展业务专题分析，使用数据挖掘各类算法构建相关的业务模型，完成业务分...</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1649</th>\n",
       "      <td>3404</td>\n",
       "      <td>3580</td>\n",
       "      <td>ETL/大数据/数据分析/实施</td>\n",
       "      <td>格蒂电力</td>\n",
       "      <td>天津</td>\n",
       "      <td>500-2000人</td>\n",
       "      <td>大专</td>\n",
       "      <td>未融资</td>\n",
       "      <td>企业服务</td>\n",
       "      <td>6k-12k</td>\n",
       "      <td>3-5年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"技能培训\",\"带薪年假\",\"绩效奖金\",\"岗位晋升\"]</td>\n",
       "      <td>\\n工作职责\\n1.   负责数据接入、数据整合中的链路配置与调度配置工作。\\n职位要求\\n...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1650</th>\n",
       "      <td>3405</td>\n",
       "      <td>3581</td>\n",
       "      <td>数据分析师</td>\n",
       "      <td>吉城美家</td>\n",
       "      <td>天津</td>\n",
       "      <td>2000人以上</td>\n",
       "      <td>本科</td>\n",
       "      <td>未融资</td>\n",
       "      <td>移动互联网</td>\n",
       "      <td>7k-14k</td>\n",
       "      <td>1-3年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[\"五险一金\",\"岗位晋升\"]</td>\n",
       "      <td>\\n负责站点日常数据分析、提前通过数据分析对业务有预测性、通过数据说话、解决站点管理问题、\\n</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1651</th>\n",
       "      <td>3406</td>\n",
       "      <td>3582</td>\n",
       "      <td>数据分析支持</td>\n",
       "      <td>云链供应链</td>\n",
       "      <td>天津</td>\n",
       "      <td>15-50人</td>\n",
       "      <td>本科</td>\n",
       "      <td>未融资</td>\n",
       "      <td>金融</td>\n",
       "      <td>4k-6k</td>\n",
       "      <td>1-3年</td>\n",
       "      <td>NaN</td>\n",
       "      <td>[]</td>\n",
       "      <td>\\n        岗位职责：\\n1、负责部门日常数据报表的制定、维护、优化；\\n2、支持运...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1652 rows × 19 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      level_0  index     positionName companyShortName city companySize  \\\n",
       "0           0      0          高级数据分析师              拉勾网   北京   500-2000人   \n",
       "1           1      1            数据分析师         OK Group   北京   500-2000人   \n",
       "2           2      2          高级数据分析师           金山办公软件   北京     2000人以上   \n",
       "3           3      3            数据分析师           金山办公软件   北京     2000人以上   \n",
       "4           4      4            数据分析师             京东集团   北京     2000人以上   \n",
       "...       ...    ...              ...              ...  ...         ...   \n",
       "1647     3177   3352            数据分析师             华泛信息   苏州     2000人以上   \n",
       "1648     3178   3353           大数据分析师             德融嘉信   苏州     50-150人   \n",
       "1649     3404   3580  ETL/大数据/数据分析/实施             格蒂电力   天津   500-2000人   \n",
       "1650     3405   3581            数据分析师             吉城美家   天津     2000人以上   \n",
       "1651     3406   3582           数据分析支持            云链供应链   天津      15-50人   \n",
       "\n",
       "     education financeStage industryField   salary workYear  \\\n",
       "0           本科        D轮及以上          企业服务  25k-35k    5-10年   \n",
       "1           大专           B轮            金融  25k-45k    5-10年   \n",
       "2           本科         上市公司         移动互联网  15k-25k     3-5年   \n",
       "3           本科         上市公司         移动互联网  15k-25k     1-3年   \n",
       "4           本科         上市公司            电商  15k-30k     3-5年   \n",
       "...        ...          ...           ...      ...      ...   \n",
       "1647        大专        不需要融资            其他  10k-15k     1-3年   \n",
       "1648        本科        不需要融资         移动互联网   6k-12k     1-3年   \n",
       "1649        大专          未融资          企业服务   6k-12k     3-5年   \n",
       "1650        本科          未融资         移动互联网   7k-14k     1-3年   \n",
       "1651        本科          未融资            金融    4k-6k     1-3年   \n",
       "\n",
       "                                                 hitags  \\\n",
       "0     [\"免费下午茶\",\"ipo倒计时\",\"bat背景\",\"地铁周边\",\"每天管两餐\",\"定期团建...   \n",
       "1                                                   NaN   \n",
       "2                                                   NaN   \n",
       "3                                                   NaN   \n",
       "4                                [\"免费班车\",\"免费体检\",\"地铁周边\"]   \n",
       "...                                                 ...   \n",
       "1647                                                NaN   \n",
       "1648                                                NaN   \n",
       "1649                                                NaN   \n",
       "1650                                                NaN   \n",
       "1651                                                NaN   \n",
       "\n",
       "                   companyLabelList  \\\n",
       "0     [\"五险一金\",\"弹性工作\",\"带薪年假\",\"免费两餐\"]   \n",
       "1      [\"节日礼物\",\"年度旅游\",\"扁平管理\",\"领导好\"]   \n",
       "2     [\"年底双薪\",\"节日礼物\",\"技能培训\",\"绩效奖金\"]   \n",
       "3     [\"年底双薪\",\"节日礼物\",\"技能培训\",\"绩效奖金\"]   \n",
       "4     [\"五险一金\",\"带薪年假\",\"免费班车\",\"定期体检\"]   \n",
       "...                             ...   \n",
       "1647  [\"技能培训\",\"节日礼物\",\"带薪年假\",\"绩效奖金\"]   \n",
       "1648                             []   \n",
       "1649  [\"技能培训\",\"带薪年假\",\"绩效奖金\",\"岗位晋升\"]   \n",
       "1650                [\"五险一金\",\"岗位晋升\"]   \n",
       "1651                             []   \n",
       "\n",
       "                                             job_detail  Python  SQL  Tableau  \\\n",
       "0     \\n1.搭建数据指标框架，完整并准确反映业务趋势和变化，及时发现和定位问题\\n2.独立完成数...       1    1        0   \n",
       "1     \\n工作职责：\\n1. 负责建立交易平台日常分析体系，包括核心指标体系、报表体系，专题活动分...       0    1        0   \n",
       "2     \\n职位描述：1.对亿计的办公用户数据进行深度挖掘，引导产品、运营，并能实际应用到业务中带来...       1    1        0   \n",
       "3     \\n工作职责：-负责日常运营、业务数据等分析-针对产品需求做深入的数据分析报告，分析用户行为...       0    1        0   \n",
       "4     \\n【数据分析师岗】\\n岗位要求：\\n1、构建及维护客户体验相关数据报表平台；\\n2、与大数...       0    1        1   \n",
       "...                                                 ...     ...  ...      ...   \n",
       "1647  \\n岗位职责：\\n深入了解项目组的业务需求,在此基础上进行数据收集、数据分析、商业报告的撰写...       1    1        0   \n",
       "1648  \\n岗位职责：\\n1. 开展业务专题分析，使用数据挖掘各类算法构建相关的业务模型，完成业务分...       1    1        0   \n",
       "1649  \\n工作职责\\n1.   负责数据接入、数据整合中的链路配置与调度配置工作。\\n职位要求\\n...       0    1        0   \n",
       "1650    \\n负责站点日常数据分析、提前通过数据分析对业务有预测性、通过数据说话、解决站点管理问题、\\n       0    0        0   \n",
       "1651  \\n        岗位职责：\\n1、负责部门日常数据报表的制定、维护、优化；\\n2、支持运...       0    0        0   \n",
       "\n",
       "      Excel  SPSS/SAS  \n",
       "0         0         0  \n",
       "1         0         0  \n",
       "2         0         0  \n",
       "3         0         1  \n",
       "4         1         1  \n",
       "...     ...       ...  \n",
       "1647      1         0  \n",
       "1648      1         1  \n",
       "1649      0         0  \n",
       "1650      0         0  \n",
       "1651      0         0  \n",
       "\n",
       "[1652 rows x 19 columns]"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
